求助 为什么200 + 200 = 144
求助 为什么200 + 200 = 144没看懂 课后题解释 第一题 没看懂 为什么 b = 200; c = 200;a = b + c;200+200 = 144????#include <stdio.h>int main()
{
unsigned char a, b, c;
b = c = 200;
a = b + c;
printf("a = %u\n", a);
printf("b = %u\n", b);
printf("c = %u\n", c);
return 0;
}
本帖最后由 无符号整形 于 2016-9-17 19:09 编辑
发生溢出了。
unsigned char的赋值范围是0~255(LINUX下),200+200=400,那么就是a=400,但是赋值范围是0-255,所以被赋值之后的变量就会溢出,溢出了,变量就会变成赋值范围的最小值再加上剩余的值,如果又溢出了就会重复执行这个操作,直到值在赋值范围内为止。
你可以算算:400-255(溢出了)=144,所以就是144。
好抽象啊{:10_291:} 楼主,char十进制取值范围最高只能是255,200+200=400了 无符号整形 发表于 2016-9-17 18:56
发生溢出了。
unsigned char的赋值范围是0~256(LINUX下),200+200=400,那么就是a=400,但是赋值范围是0 ...
{:5_95:}{:5_95:}发现小错误指正下,是0~255呢,255 + 1 + 144 —> 0 + 144 —>144 zzzz76 发表于 2016-9-17 19:05
发现小错误指正下,是0~255呢,255 + 1 + 144 —> 0 + 144 —>144
嗯嗯!{:5_108:} 无符号整形 发表于 2016-9-17 18:56
发生溢出了。
unsigned char的赋值范围是0~255(LINUX下),200+200=400,那么就是a=400,但是赋值范围是0 ...
{:10_243:}懂了 飞飞123 发表于 2016-9-17 18:56
楼主,char十进制取值范围最高只能是255,200+200=400了
自学 学到第十课了 看视屏好像没什么 一做课后题 完全蒙圈 zzzz76 发表于 2016-9-17 19:05
发现小错误指正下,是0~255呢,255 + 1 + 144 —> 0 + 144 —>144
3Q zzzz76 发表于 2016-9-17 19:05
发现小错误指正下,是0~255呢,255 + 1 + 144 —> 0 + 144 —>144
没懂 255 + 1 +144
144哪里来的
上边那个为什么是 256呢 255+1 一又是哪里来的呢师兄 本帖最后由 patton88 于 2016-9-18 00:34 编辑
// 1100 1000 200
//+1100 1000 200
//1 1001 0000 128+16=144。最高位舍去,相当于舍去了256。400-256=144
patton88 发表于 2016-9-18 00:30
// 1100 1000 200
//+1100 1000 200
//1 1001 0000 128+16=144。最高位舍去,相当于舍去了256。4 ...
{:10_243:}谢谢 我先记下 慢慢领悟、、、、、、、、、、 明白了,谢谢
页:
[1]