char c=130;printf ("%d",c);这个得出的结果为什么是-126啊?
答案:4 悬赏:80
解决时间 2021-02-20 09:10
- 提问者网友:霸道又专情♚
- 2021-02-19 12:31
char c=130;printf ("%d",c);这个得出的结果为什么是-126啊?
最佳答案
- 二级知识专家网友:丢不掉的轻狂
- 2021-02-19 12:49
这是由于字符和整型是兼容的。计算所有的符号,都是按以0~255对应的ASCII码存储的。首先,我们来看看c=130,在内存中是如何存在的:
130换算成二进制串是"1000 0010"。(你应该知道计算机存储数据是以补码存储的,正数的补码,就是它本身,即最高位是0.而负数的补码是以正数的二进制码取反加1【除最高位外】,如-1的补码是这样来求的:
先看正数1的二进制编码:0000 0001,除最高位1不动外,其它位取反加1.
所以是1000 0001取反:1111 1110,再加1得:1111 1111,所以-1的补码是"11111111",即计算机要存储-1的话,在内存中的存储就是“1111 1111”,
知道了这一个,我们再来看看求-126的补码:126的二进制编码是"0111 1110",所以-126的补码是先求反码再+1,注意(负数的最高位肯定是1),由上所讲解的方法。-126的补码是"1000 0010",你会发觉这和130的的编码是一样的。关键就在于你用了%d打印。"%d",打印的时候,因为你是8位的,明显应该是short int,编译器自动解释成"hd",注意,最高位是1,所以它被解释成了-126.
by:kingbridge
130换算成二进制串是"1000 0010"。(你应该知道计算机存储数据是以补码存储的,正数的补码,就是它本身,即最高位是0.而负数的补码是以正数的二进制码取反加1【除最高位外】,如-1的补码是这样来求的:
先看正数1的二进制编码:0000 0001,除最高位1不动外,其它位取反加1.
所以是1000 0001取反:1111 1110,再加1得:1111 1111,所以-1的补码是"11111111",即计算机要存储-1的话,在内存中的存储就是“1111 1111”,
知道了这一个,我们再来看看求-126的补码:126的二进制编码是"0111 1110",所以-126的补码是先求反码再+1,注意(负数的最高位肯定是1),由上所讲解的方法。-126的补码是"1000 0010",你会发觉这和130的的编码是一样的。关键就在于你用了%d打印。"%d",打印的时候,因为你是8位的,明显应该是short int,编译器自动解释成"hd",注意,最高位是1,所以它被解释成了-126.
by:kingbridge
全部回答
- 1楼网友:懂得ㄋ、沉默
- 2021-02-19 16:19
你定义的C是字符型。后面输出的又是整型
- 2楼网友:留下所有热言
- 2021-02-19 15:16
输出格式不对
char型用%c
int型才用%d
- 3楼网友:爱情是怎么炼成的
- 2021-02-19 14:00
char c=130; printf("%d",c); 为什么输出会得到-126呢?字符型的范围不是0~255
不是的
char 的范围是-128-127
unsigned char 才是0-255
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |