C语言基础知识点(九)数据类型溢出


char a=101;
int sum=200;
a+=27;sum+=a;
printf("%d\n",sum);

参考答案:D  72. char类型的范围是-128---+127,当a+=27 ,之后a的值超出可表示范围会变为-128.

a为char型,-128~127,a=101,a+=27后溢出a=-128:
a=127时不溢出    01111111(127补码)
a+=1时溢出         10000000(-128补码)
                           

sum += a;
sum为int型,a(char提升为int)
                     10000000         -------->11111111  11111111   11111111   10000000(-128补码)
                                                         
所以,sum=200-128:00000000  00000000  00000000  11001000
                     +        11111111    11111111   11111111    10000000
 ----------------------------------------------------------------------------------
                               00000000  00000000  00000000  01001000    (64+8=72)  
... 收起

a为char型,-128~127,a=101,a+=27后溢出a=-128:
a=127时不溢出    01111111(127补码)
a+=1时溢出         10000000(-128补码)
                           

sum += a;
sum为int型,a(char提升为int)
                     10000000         -------->11111111  11111111   11111111   10000000(-128补码)
                                                         
所以,sum=200-128:00000000  00000000  00000000  11001000
                     +        11111111    11111111   11111111    10000000
 ----------------------------------------------------------------------------------
                               00000000  00000000  00000000  01001000    (64+8=72)  

char占一个字节 所以数据范围为-128~127 超过127后数据会从-128开始累加 a += 27本来等于128但最大为127所以此时a=-128 然后sum += a等价于sum-a=200 - 128等于72

你可能感兴趣的:(c语言,算法,开发语言)