zoukankan      html  css  js  c++  java
  • 关于原码反码补码的总结报告

    1,原码:符号加上数字的二进制表示 +7:00000111            -7:100000111

           2,反码:如果一个数为正,他的反码与原码相同,如果是负数那么符号位不变 其余位数取反   -7反码:111111000

           3,补码:一个数如果为正其原码反码补码相同        如果是负数那么在反码加一

    -7 补码:11111001

    基本概念

    正数(定点小数、定点整数): 
        原码,补码,反码相同;
     
    负数(定点小数、定点整数): 
         反码:保持原码符号位不变,数值位取反 
         补码:第一种方法给反码的最低位+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位。 
  • 相关阅读:
    远程调试 ASP.NET MVC 项目
    两行代码搞定 JavaScript 的日期验证
    ASP.NET MVC 静态资源打包和压缩问题小记
    CodeSmith7连接Mysql
    网站开发烦心记-1
    感悟还是教训,或者。。。
    可以断点续传的scp
    CTP报单状态
    android studio 0.8.8下载
    期货结算单查询
  • 原文地址:https://www.cnblogs.com/1061321925wu/p/9752378.html
Copyright © 2011-2022 走看看