黑马程序员技术交流社区
标题:
为什么0xFFFFFFFF是-1呢?
[打印本页]
作者:
dzr19850306
时间:
2013-2-7 08:04
标题:
为什么0xFFFFFFFF是-1呢?
FFFFFFFF=1111 1111 1111 1111 1111 1111 1111 1111
最高位是符号位1,所以是负数。
而其他 31位都是1,转为十进制为2^32-1=4294967695。
这个数字应该是 -4294967695.
当int i=-1的时候。应该是1000 0000 0000 0000 0000 0000 0000 0001.
以十六进制表示的时候,难道直接显示的是补码,而不是原码???
作者:
洪建超
时间:
2013-2-7 09:19
因为int 为带符号类型,带符号类型最高为是符号位,又因为0xFFFFFFFF,也就是四个字节32 bits全是1, 符号位是1,所以这个数是负数。
内存中的数值为补码表示,所以0xFFFFFFFF是一个负数的补码。负数从补码求原码,最高符号位不变,保持 1, 其余各位求反,末尾加1,也就是 0xFFFFFFFF,二进制为:11111111 11111111 11111111 11111111
-> 10000000 00000000 00000000 00000000
-> 10000000 00000000 00000000 00000001
原码首位表示符号位,其余位表示绝对值大小
作者:
pzfpang449
时间:
2013-2-7 09:45
内存里面都是使用补码形式保存的。
其中正数的补码和原码相同
负数补码等于源码-〉反码 + 1;
对于 i=0xffffffff
ffffffff转换为二进制为 1111 1111 1111 1111 1111 1111 1111 1111
i(补)=0x80000000+0x1=0x80000001
二进制为1000 0000 0000 0000 0000 0000 0000 0001
为-1
另外如果使用%u 输出,这样作为无符号数字,因为最高为也用来表示数字本身,所以按照会你理解的数字大小表示。
说白了:-1的补码就是0xff。。。。。。
希望对楼主有所帮助
作者:
铿锵科技
时间:
2013-2-7 11:59
在计算机原理中,整数中的正数最高位为0,负数最高位为1,负数是正数按位取反后加1,所以
0xFFFFFFFF是-1
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2