c语言中 int a=-1 为什么-1= 0xffffffff
结论是这样但是我不明知道32位是什么意思还是f代表的是什么呢?说的通俗点还有h有代表什么呢最好全部都给我解释清楚我是初学者分数我可以再加上去...
结论是这样 但是 我不明知道 32位是什么意思 还是f代表的是什么呢 ? 说的通俗点
还有 h 有代表什么呢
最好全部都给我解释清楚我是初学者 分数我可以再加上去 展开
还有 h 有代表什么呢
最好全部都给我解释清楚我是初学者 分数我可以再加上去 展开
7个回答
展开全部
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,计算机里用补码表示。。。。
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,计算机里用补码表示。。。。
追问
写到这里你看一下,1+(-1)=0,给ffffffff+1是不是得到的结果是1’00000000,超出了计算机存储的32位,那么能存储的位数都变成了0, 这一点你还可以再解释一下吗
追答
-1 的补码 是ffffffff,ffffffff+1以后超出了计算机存储位数,也就是溢出,最高位1就自动舍弃了。于是就得出了0这个结果。
展开全部
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
分数:我不是要悬赏分来的,只要给采纳就可以了。
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
分数:我不是要悬赏分来的,只要给采纳就可以了。
追问
我差不多了解了~ 就是还差的就是为什么-1回是32个1 还有 16进制里面 1111 1111 1111 1111 1111 1111 1111 1111 为什么4个一就是等于16进制呢 希望您能帮我回答一下 我分数现在给您了
追答
32个1表示-1:首先这是一种规定,当然有其合理性。32个1再加1(注意进位,逢二进一)就变成了1 0000 0000 ...(1后面跟32个0),由于空间只能存下32个二进制位,那么第一个1就存不下,不见了,就变成了0。-1+1=0这样很合理,电脑也好算。
4个二进制位组成一个16进制:16是2的4次方,所以二进制转十六进制只要四位分组就可以了,纯数学问题,您自己思考或证明一下。
分数:别总提分数,很无聊,况且你已经采纳别人为最佳答案了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
-1 在计算机里用反码表示就是11111111B
以16进制表示就是0FFH
这里B是2进制,H是16进制
以16进制表示就是0FFH
这里B是2进制,H是16进制
追问
那F代表什么呢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在计算机中,所有的整型数值均以补码形式存储。
要了解补码,先要知道反码的概念。一个数值的反码,就是它的二进制码按位取反。
比如数值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的原理了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这也不懂,那也不懂,我就是样样给你讲了你也看不懂的,要想理解这些,你还有很多基础的没有学到呢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询