中易网

char c=130;printf ("%d",c);这个得出的结果为什么是-126啊?

答案:4  悬赏:80  
解决时间 2021-02-20 09:10
char c=130;printf ("%d",c);这个得出的结果为什么是-126啊?
最佳答案
这是由于字符和整型是兼容的。计算所有的符号,都是按以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
全部回答
你定义的C是字符型。后面输出的又是整型
输出格式不对 char型用%c int型才用%d
char c=130; printf("%d",c); 为什么输出会得到-126呢?字符型的范围不是0~255 不是的 char 的范围是-128-127 unsigned char 才是0-255
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
校园网如何在Scientific.Net上下载文献?
在4s店修车需要换轮胎,旧轮胎我可以拿走吗?走
CAD制图 价钱问题
辣条对身体好吗,我经常吃(巴西烤肉)
用戎尺打女生那种部位最疼
南国新天地在哪里啊,我有事要去这个地方
如何去重用一个人才
星华西区西门在什么地方啊,我要过去处理事情
都有那些字体可以用在商业用途,不会被告侵权
DAREMO INAI. DAREMO. 可能是日语,罗马音求
第一部《婚姻法》对合适年龄的规定是男多大女
芊口顺麻辣烫我想知道这个在什么地方
陆达职称都是骗人的,大家千万别相信,我被骗
一个没见过的网友说什么会照顾我一辈子,相信
“赶”字用音序查字法,应查音序
推荐资讯
php语言疑问,$str .= $num." ";中的.=代表什
在photoshop中怎么打开camera raw进行编辑
河南一级消防高中毕业证可以报名吗
莱芙·艾迪儿地址在什么地方,想过去办事
怎么理解这句话道德最高法律法律是最低道德
燕潮酩吉庆38度礼盒装价格
报考公务员时备注里有个参照管理是什么意思?
什么是艺术考生准考证
爱育右脑教育地址有知道的么?有点事想过去
绝望的主妇 gaby 女儿回到她身边了吗
11岁的小女孩,胸部怎么这么大?
唱出打工人的心酸,歌曲有哪
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?