滴水逆向联盟

标题: 补码转负整数 [打印本页]

作者: 大禹治水    时间: 2014-11-21 08:33
标题: 补码转负整数
例如:补码转负整数

已知内存中以补码形式存放的二进制数:11111010 ,要求求出其十进制数。

求:11111010 的反码
补码:11111010
反码:00000101
根据反码转换成十进制数:00000101=1*2^0 + 0*2^1 + 1*2^2 = 5
因为只有负数才可以以补码形式存在所以要在 5 前面加 - 号: -5
让所得负数减1:-5-1= -6

答案:11111010 求出的负整数是:-6

无符号整数的存放形式

用两个字符来存放一个无符号数时,就不存在符号位了,16个二进制位
全部用来存放二进制数值,这时16个二进制全部是:1111111111111111
表示了2字节的二进制位,可以存放的最大整数  65535
(无符号不存在负数)

   有符号 -1 的二进制表示形式是:16个 1 ,表示了最大负数。
   无符号 65535 的二进制表示形式也是 16个1
   所以 有符号的最大负数 -1  和 无符号的最大存放数 65535 存储方式相同。

   小结:
      负整数求补码步骤:
      第一步:先求将其转换成二进制。
      第二步:将其二进制反码。
      第三步:将反码再补码。(就是在末位 + 1)
      第四步:得出该负数的,补码。

      补码求负整数步骤:
      第一步:将补码反码
      第二步:将反码转换成十进制数,后再加符号,将其变成负数。
      第三步:将其负数再减去 -1  
     (因为负整数 反码转换成补码过程中需要加 1 ,所以在此要 -1)

       Ps:16位最大有符号负数是:1111111111111111  等同于10进制 -1
              16位最小有符号负数是:100000000000000  等同于10进制 -32768
           
              16位最大无符号数是:1111111111111111  等同于10进制 65535
              16位最小无符号数是:000000000000000  等同于10进制 0

作者: bcjc209    时间: 2016-12-9 10:43
:lol:lol这个会了!




欢迎光临 滴水逆向联盟 (http://www.dtdebug.com/) Powered by Discuz! X3.2