Yth961102zxc 发表于 2020-4-2 14:06:03

关于字符型输出的值的疑惑

本帖最后由 Yth961102zxc 于 2020-4-2 14:07 编辑


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

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

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

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

4.小甲鱼给出的解释如下

这个ASCII码是和哪个对应的?

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

可能有的地方我表达的不太清楚,再次感谢大佬们!

Qdb 发表于 2020-4-2 14:06:04

无符号字符型变量会先将255转换成二进制形式,即0xff,然后进行储存。
当你读取该变量时,因为是无符号型变量,所以首位为字符位,‘0’为正,‘1’为负。
因为255的二进制编码首位为1,故为负数,其后七位为(111 1111),负数二进制转十进制应先取其补码,即(000 0000),再加1,即(000 0001),即十进制数‘1’
故当你使用八位无符号类型储存十进制数255时,会输出-1

杜若左 发表于 2020-4-2 15:49:50

如果你对不同数据类型的上限有疑惑的话。你就将这个范围看成一个一个环。当突破最大值时会自动变成最小值。应该是在编程过程中尽力避免的问题。其实也没必要太过深究。
希望我的解答对你有帮助。{:10_245:}

Yth961102zxc 发表于 2020-4-2 17:25:29

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

哇 是这样的吗 感谢感谢
页: [1]
查看完整版本: 关于字符型输出的值的疑惑