c语言中 int a=-1 为什么-1= 0xffffffff

2024-11-06 18:17:56
推荐回答(5个)
回答(1):

32位的意思是,计算机中用二进制表示的话二进制的位数是32位,每四位二进握态制可以由一位十六进制代替,那么用32位的二进制表示的数据用十六进制表示就是8位。例如,1111'1111'1111'1111'1111'1111'1111'1111等价于ffffffff
0x是十六进制的前缀,h可以说是十六进制的后缀。二进制的后缀是b,例如写二兄皮虚进制时习惯写10100110b,写十六进制则后面多加个h
f是15的十六进制表示,十六进制是这样的,0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f、10、11。。。。。。 对应的十进制就是 0、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16.。。。。
写到这里你看一下,1+(-1)=0,给ffffffff+1是不是得到的结果是1’00000000,超出了计算机存储的32位,那么能存储的位数都变成了0,是不是。
接下来跟你说一下计算机里数字的原码反码补码三种羡燃表达方式。首先提出一个符号位,如果是正数,符号位是0,负数符号位是1,对于正数来说原码、补码、反码都是一样的,而对于负数来说,反码是原码除符号位按位取反,补码是在反码末尾+1。对于你的疑问,-1的原码是80000001,反码是fffffffe,+1后补码就是ffffffff,计算机里用补码表示。。。。

回答(2):

32位:32个二进制位。
0x:十六进制的标志,0x后面跟十六进悉桐制数。
f:十六进制里的15。
十六进制:逢16进1,数数就是0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,10,11,12,13,14,15,16,17,18,19,1a,1b,1c,1d,1e,1f,20,21……
h:十六进制的标志。11h意睁铅坦思是0x11。因为激差十六进制简写是hex。
补充:为什么用十六进制,因为二进制太长了,十六进制0xffffffff写到二进制里就是1111 1111 1111 1111 1111 1111 1111 1111
分数:我不是要悬赏分来的,只要给采纳就可以了。

回答(3):

-1 在计尺胡算岁困猛机里乎桥用反码表示就是11111111B

以16进制表示就是0FFH

这里B是2进制,H是16进制

回答(4):

在计算橡老机中,所有的整型数值均以补码形式存储。
要了解补码,先要知道反码的概念。一个数值的反码,就是它的乱岩二进制码按位取反。
比如数值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的原理了。

回答(5):

你这也不懂,那也不懂,我就是样样给你讲了你也看不懂的,要想理解这些,你还有很多基础的没有学到呢