有符号数与无符号数的上溢与下溢问题

来源:互联网 发布:威纶触摸屏软件下载 编辑:程序博客网 时间:2024/05/01 01:14

有符号数与无符号数的上溢与下溢问题 以8位为例:

#include<stdio.h>int main(){//8位有符号的最大数char a = 127;printf("a = %d\n",a);a++;printf("a = %d\n",a);printf("************\n");//8位有符号的最小数char b = -128;printf("b = %d\n",b);b--;printf("b = %d\n",b);printf("************\n");//8位无符号数的最大数unsigned char c = 255;printf("c = %u\n",c);c++;printf("c = %u\n",c);printf("************\n");//8位无符号数的最小数unsigned char d = 0;printf("d = %u\n",d);d--;printf("d = %u\n",d);printf("************\n");unsigned char i = 255;i+=3;//应该打印 出2printf("i = %d\n",i);printf("************\n");char j = 127;j+=3;//应该打印出-126printf("j = %d\n",j);return 0;}


仔细来看,溢出会造成一个范围内的循环。输出结果如下:

a = 127a = -128************b = -128b = 127************c = 255c = 0************d = 0d = 255************i = 2************j = -126