得意的屁 发表于 2016-9-17 18:30:45

求助 为什么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 18:56:04

本帖最后由 无符号整形 于 2016-9-17 19:09 编辑

发生溢出了。
unsigned char的赋值范围是0~255(LINUX下),200+200=400,那么就是a=400,但是赋值范围是0-255,所以被赋值之后的变量就会溢出,溢出了,变量就会变成赋值范围的最小值再加上剩余的值,如果又溢出了就会重复执行这个操作,直到值在赋值范围内为止。
你可以算算:400-255(溢出了)=144,所以就是144。
好抽象啊{:10_291:}

飞飞123 发表于 2016-9-17 18:56:20

楼主,char十进制取值范围最高只能是255,200+200=400了

zzzz76 发表于 2016-9-17 19:05:30

无符号整形 发表于 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

无符号整形 发表于 2016-9-17 19:09:45

zzzz76 发表于 2016-9-17 19:05
发现小错误指正下,是0~255呢,255 + 1 + 144 —> 0 + 144 —>144

嗯嗯!{:5_108:}

得意的屁 发表于 2016-9-17 19:49:29

无符号整形 发表于 2016-9-17 18:56
发生溢出了。
unsigned char的赋值范围是0~255(LINUX下),200+200=400,那么就是a=400,但是赋值范围是0 ...

{:10_243:}懂了

得意的屁 发表于 2016-9-17 19:50:14

飞飞123 发表于 2016-9-17 18:56
楼主,char十进制取值范围最高只能是255,200+200=400了

自学 学到第十课了 看视屏好像没什么 一做课后题 完全蒙圈

得意的屁 发表于 2016-9-17 19:51:57

zzzz76 发表于 2016-9-17 19:05
发现小错误指正下,是0~255呢,255 + 1 + 144 —> 0 + 144 —>144

3Q

得意的屁 发表于 2016-9-17 19:55:47

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:30:12

本帖最后由 patton88 于 2016-9-18 00:34 编辑

                //   1100 1000        200
                //+1100 1000        200
                //1 1001 0000        128+16=144。最高位舍去,相当于舍去了256。400-256=144

得意的屁 发表于 2016-9-18 08:30:34

patton88 发表于 2016-9-18 00:30
//   1100 1000        200
                //+1100 1000        200
                //1 1001 0000        128+16=144。最高位舍去,相当于舍去了256。4 ...

{:10_243:}谢谢 我先记下 慢慢领悟、、、、、、、、、、

ロ觜角丄ǒ金 发表于 2016-9-18 09:26:42

明白了,谢谢
页: [1]
查看完整版本: 求助 为什么200 + 200 = 144