zoukankan      html  css  js  c++  java
  • 反码补码报告

    关于反码补码的知识总结

    基本概念

    正数(定点小数、定点整数): 
        原码,补码,反码相同;
     
    负数(定点小数、定点整数): 
         反码:保持原码符号位不变,数值位取反 
         补码:第一种方法给反码的最低位+1就可以啦,若数值最高位有进位则丢弃(不向符号位进位) 
                   第二种方法以原码为基础,符号位不变,其他从最低位开始,直到遇到第一个1之前什么都不变,该位之前位依次按位取反,即(推荐) 
                        原码: ([符号位][***][1][n*0]),其对应补码仅需对[***]部分依次取反即可。
     
    例如,当编码总位数为8时有: 
    +127的原码、反码、补码都为:0 1111111 
    -127的原码、反码、补码依次为:1 1111111、1 0000000、1 0000001 

    已知负数的补码,如何获取其十进制数?

    1.先对各位取反,包括符号位
    2.转换为十进制数
    3.添加负号并减1
    例如:对于11111010,取反得00000101,对应十进制数为5,由第三步转换可得到结果:-6
     
     

    为何n位二进制数据的表示范围是[-2^(n-1),2^(n-1)-1]?

    以8位二进制为例,-128=(-1)+(-127)=([1000 0001]+[1111 1111])原=([1111 1111]+[1000 0001])补=([1000 0000])补,所以在补码运算结果中,([1000 0000])补就表示-128,这就是多出来的一位数据。

    符号扩展

    用于在数值类型转换时扩展二进制位的长度,以保证转换后的数值和原数值的符号(正或负)和大小相同,一般用于较窄的类型(如byte)向较宽的类型(如int)转换。扩展二进制位长度指的是,在原数值的二进制位左边补齐若干个符号位(0表示正,1表示负)。
    Java的数值类型转换规则一<Java解惑>总结
    1.如果最初的数值类型是有符号的,那么就执行符号扩展;如果是char类型,那么不管它要被转换成什么类型,都执行零扩展。
    2.如果目标类型的长度小于源类型的长度,则直接截取目标类型的长度。例如将int型转换成byte型,直接截取int型的右边8位。 
     
  • 相关阅读:
    POJ 1330 Nearest Common Ancestors(LCA Tarjan算法)
    LCA 最近公共祖先 (模板)
    线段树,最大值查询位置
    带权并查集
    转负二进制
    UVA 11437 Triangle Fun
    UVA 11488 Hyper Prefix Sets (字典树)
    UVALive 3295 Counting Triangles
    POJ 2752 Seek the Name, Seek the Fame (KMP)
    UVA 11584 Partitioning by Palindromes (字符串区间dp)
  • 原文地址:https://www.cnblogs.com/1502762920-com/p/9750311.html
Copyright © 2011-2022 走看看