unsigned char 和char一直以来都没有重视其范围有什么用,今天终于感受到了
unsigned char 的范围为0~ 255
signed char 的范围为-127~128
今天做到一道笔试题(指出错误)
#define MAX 255
int main()
{
unsigned char dat[MAX];
for(i=0;i<=MAX;i++)
dat[i]=i;
printf(”%d\n”,dat[i]);
return 0;
}
因为MAX是255,则dat[0]到dat[255]总共有256个数,而unsigned char 的范围是0~255,所以溢出了。
在网上看到网友提的疑问
下面的例子,考察的也是对unsigned char 和signed char范围的理解
unsigned char a=100;
unsigned char b=200;
unsigned char c;
c=a+b;
printf("%d %d\n",c,a+b);//44 300
printf("%d %d\n",c,a+b);
输出一个300是因为你直接传a+b这个表达式给printf函数,计算机在进行加法运算时,会将a和b当成int型来计算,最后生成的临时变量也是int型的,你通过%d格式来输出的话就是300喽
而c因为是unsigned char 类型,300超过他的范围,所以取补码。
char a=100;
char b=200;
char c;
c=a+b;
printf("%d %d\n",c,a+b); //44 44
为什么输出44
就是这时候的a+b为什么输出的是4
unsigned char的范围是0~255,所以第一个b就是200
char的范围是-128~127,所以第二个b不可能是200,超出范围了,变成了-56
在两段代码里各加一个printf("%d\n", b)看看就知道了。