鱼C论坛

 找回密码
 立即注册
查看: 1889|回复: 3

[已解决]关于字符型输出的值的疑惑

[复制链接]
发表于 2020-4-2 14:06:03 | 显示全部楼层 |阅读模式
5鱼币
本帖最后由 Yth961102zxc 于 2020-4-2 14:07 编辑

批注 2020-04-02 132007.png 批注 2020-04-02 132042.png 批注 2020-04-02 132357.png
这是目标期望输出的结果 和实际执行的代码
我是个刚刚入坑c语言的萌新,做小甲鱼的课后作业时遇见了这个问题,有几点比较疑惑 ,希望有大佬能给予解答 感谢感谢!!!

1.signed char = i 之后 i的值应该是属于-128~127之间的数对吗,那么把255这个溢出的值赋值给i,为什么不是报错呢?

2.我尝试了将更大的数赋值给i,例如258,358,得到的结果仿佛是单纯的将这个数与-256相加之后得到的和,但是358已经超出了8位补码的计算范围,这其中的运算规则是怎样的呢?

3.unsigned char能否用int来替换?

4.小甲鱼给出的解释如下
批注 2020-04-02 133728.png
这个ASCII码是和哪个对应的?

5.第三张图是我将%hhd和%hhu调换后输出的结果,请问这个65535又是怎么来的呀

可能有的地方我表达的不太清楚,再次感谢大佬们!
最佳答案
2020-4-2 14:06:04
无符号字符型变量会先将255转换成二进制形式,即0xff,然后进行储存。
当你读取该变量时,因为是无符号型变量,所以首位为字符位,‘0’为正,‘1’为负。
因为255的二进制编码首位为1,故为负数,其后七位为(111 1111),负数二进制转十进制应先取其补码,即(000 0000),再加1,即(000 0001),即十进制数‘1’
故当你使用八位无符号类型储存十进制数255时,会输出-1

最佳答案

查看完整内容

无符号字符型变量会先将255转换成二进制形式,即0xff,然后进行储存。 当你读取该变量时,因为是无符号型变量,所以首位为字符位,‘0’为正,‘1’为负。 因为255的二进制编码首位为1,故为负数,其后七位为(111 1111),负数二进制转十进制应先取其补码,即(000 0000),再加1,即(000 0001),即十进制数‘1’ 故当你使用八位无符号类型储存十进制数255时,会输出-1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-2 14:06:04 | 显示全部楼层    本楼为最佳答案   
无符号字符型变量会先将255转换成二进制形式,即0xff,然后进行储存。
当你读取该变量时,因为是无符号型变量,所以首位为字符位,‘0’为正,‘1’为负。
因为255的二进制编码首位为1,故为负数,其后七位为(111 1111),负数二进制转十进制应先取其补码,即(000 0000),再加1,即(000 0001),即十进制数‘1’
故当你使用八位无符号类型储存十进制数255时,会输出-1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-2 15:49:50 | 显示全部楼层
如果你对不同数据类型的上限有疑惑的话。你就将这个范围看成一个一个环。当突破最大值时会自动变成最小值。应该是在编程过程中尽力避免的问题。其实也没必要太过深究。
希望我的解答对你有帮助。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-2 17:25:29 | 显示全部楼层
杜若左 发表于 2020-4-2 15:49
如果你对不同数据类型的上限有疑惑的话。你就将这个范围看成一个一个环。当突破最大值时会自动变成最小值。 ...

哇 是这样的吗 感谢感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 19:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表