A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© dzr19850306 中级黑马   /  2013-2-7 08:04  /  5237 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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-15 21:44
请申请修改下论坛会员名,如果已经申请还没有修改成功,请暂时在个人资料里备注下  发表于 2013-2-15 21:44

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

3 个回复

倒序浏览
因为int 为带符号类型,带符号类型最高为是符号位,又因为0xFFFFFFFF,也就是四个字节32 bits全是1, 符号位是1,所以这个数是负数。

内存中的数值为补码表示,所以0xFFFFFFFF是一个负数的补码。负数从补码求原码,最高符号位不变,保持 1, 其余各位求反,末尾加1,也就是 0xFFFFFFFF,二进制为:11111111 11111111 11111111 11111111

->  10000000 00000000 00000000 00000000
->  10000000 00000000 00000000 00000001

原码首位表示符号位,其余位表示绝对值大小

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
内存里面都是使用补码形式保存的。

其中正数的补码和原码相同

负数补码等于源码-〉反码 + 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。。。。。。

希望对楼主有所帮助

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
在计算机原理中,整数中的正数最高位为0,负数最高位为1,负数是正数按位取反后加1,所以
0xFFFFFFFF是-1
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马