课后作业问题
请解释为何下边变量 a 的值为何打印出来是 144(请写出分析过程)?#include <stdio.h>
int main()
{
unsigned char a, b, c;
b = c = 200;
a = b + c;
printf("a = %u\n", a);
return 0;
}
打印出来a=144
我感觉是取值范围不对 unsigned char 0到255 但是不知道具体为什么是144 本帖最后由 小亦003 于 2021-12-22 21:00 编辑
unsigned char 的取值范围是(0~255),
b = c = 200;
a = b + c;
a 的结果是400 >225,所以数据溢出了,144应该是随机值吧
如果想输出400,把printf中的a改为 b + c 就行
#include <stdio.h>
int main()
{
unsigned char a, b, c;
b = c = 200;
printf("a = %u\n", b + c);
return 0;
}
小亦003 发表于 2021-12-22 20:57
unsigned char 的取值范围是(0~255),
a 的结果是400 >225,所以数据溢出了,144应该是随机值吧
400-256 = 144 {:10_260:} 傻眼貓咪 发表于 2021-12-23 11:10
400-256 = 144
感谢大佬指点{:10_254:} 傻眼貓咪 发表于 2021-12-23 11:10
400-256 = 144
为什么要减256 小亦003 发表于 2021-12-23 12:26
感谢大佬指点
解释一下为什么要减256啊 摸你穷 发表于 2021-12-23 20:28
解释一下为什么要减256啊
2 楼大佬已经说明了啊,unsigned char 的取值范围是(0~255)
当 a 溢出时(256、257、258 ....)就会从 0 开始,256 = 0、257 = 1、258 = 2 .....144 摸你穷 发表于 2021-12-23 20:28
解释一下为什么要减256啊
这是数据转换规则
原理:
可以将数据存储的范围看做是一个圆环,类似轮回,循环
如果数据增长到最大值,则数据从最小值方向开始依次递增
如果数据减到最小值,则数据从最大值方向开始依次递减
a值是400,达到256已经是最大了,然后数据从最小值方向开始依次递增,所以是400 - 256 = 144 小亦003 发表于 2021-12-23 20:40
这是数据转换规则
原理:
可以将数据存储的范围看做是一个圆环,类似轮回,循环
我大概明白了就是255已经是最大值了但是还要往上加那就又重0开始加(我表达不是很清楚但是我还是明白这个意思的) 摸你穷 发表于 2021-12-23 22:00
我大概明白了就是255已经是最大值了但是还要往上加那就又重0开始加(我表达不是很清楚但是我还是明白这个 ...
对
页:
[1]