这个二进制数转成十进制是多少?我做的对不?

来源:百度知道 编辑:UC知道 时间:2024/06/27 06:40:20
二进制数:10 00 00 00 00 00 00 00.

带符号int型数据在内存中的存放形式如上所示。将其转换成十进制是不是-65535 ?因为符号位是1,所以这是个负数,先把这个二进制数减1得其补码11 11 11 11 11 11 11 11 。再将其展开成十进制,最后得数也不是-32768啊?那为什么带符号int型数据所能表示的范围是-32768呢?按照书上写的:10 00 00 00 00 00 00 00是所能表示的最小的数,转换成十进制是-32768.这对么?应该是-65535啊,因为这是个负数啊?怎么能直接就2的15次方加了个负号呢?

谢谢

16位机上的int为两个字节
表示的总数量为2^16=64k=65536
其中负数为-1~-32768
正数为0~32767
这是最小的负数所以是-32768,明白了吧

至于为什么它是最小的负数
其实要扩展符号位
-32767的原码如下
1 01 11 11 11 11 11 11 11(第一位为扩展符号位,后16位为数据位)
则-32768的原码如下
1 10 00 00 00 00 00 00 00
各位取反:
1 01 11 11 11 11 11 11 11
末位+1:
1 10 00 00 00 00 00 00 00
去掉扩展符号位就是
10 00 00 00 00 00 00 00了

至于为什么要引入扩展符号位?
在短字节向长字节扩展的时候,如int向long扩展的时候,多余的两个字节就会因为负数的补码而全添0