c语言中 int a=-1 为什么-1= 0xffffffff
答案:4 悬赏:80 手机版
解决时间 2021-04-27 19:51
- 提问者网友:
- 2021-04-27 06:04
c语言中 int a=-1 为什么-1= 0xffffffff
最佳答案
- 五星知识达人网友:三千妖杀
- 2021-04-27 07:04
在计算机中,所有的整型数值均以补码形式存储。
要了解补码,先要知道反码的概念。一个数值的反码,就是它的二进制码按位取反。
比如数值0x12345678的二进制值为
B0001 0010 0011 0100 0101 0110 0111 1000
其反码为
B1110 1101 1100 1011 1010 1001 1000 0111
写成16进制也就是0xEDCBA987
而补码的规定,非负正数补码就是它的本身。负数补码为其本身数值(绝对值)的反码加一。
知道了这一点,就可以求-1的补码了,也就是它的实际存储方式。
1的二进制码为
B0000 0000 0000 0000 0000 0000 0000 0001
其反码为
B1111 1111 1111 1111 1111 1111 1111 1110
对其加1得到补码
B1111 1111 1111 1111 1111 1111 1111 1111
转成16进制也就是
0xFFFFFFFF
这就是-1=0xffffffff的原理了。
要了解补码,先要知道反码的概念。一个数值的反码,就是它的二进制码按位取反。
比如数值0x12345678的二进制值为
B0001 0010 0011 0100 0101 0110 0111 1000
其反码为
B1110 1101 1100 1011 1010 1001 1000 0111
写成16进制也就是0xEDCBA987
而补码的规定,非负正数补码就是它的本身。负数补码为其本身数值(绝对值)的反码加一。
知道了这一点,就可以求-1的补码了,也就是它的实际存储方式。
1的二进制码为
B0000 0000 0000 0000 0000 0000 0000 0001
其反码为
B1111 1111 1111 1111 1111 1111 1111 1110
对其加1得到补码
B1111 1111 1111 1111 1111 1111 1111 1111
转成16进制也就是
0xFFFFFFFF
这就是-1=0xffffffff的原理了。
全部回答
- 1楼网友:愁杀梦里人
- 2021-04-27 10:41
这是补码,你百度一下!
- 2楼网友:低音帝王
- 2021-04-27 09:47
原码 补码 反码
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯