今天在看《Primer c++》第五版的时候,看到书上说: 当我们赋值给无符号类型一个超出其范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。
#include<iostream>
using namespace std;
int main()
{
unsigned char j=-1;
cout<<"unsigned char j= "<<j<<endl;
unsigned int i=-1;
cout<<"unsigned int i= "<<i<<endl;
return 0;
}
运行结果:
对于unsigned int 类型的运行是没有错误的,而unsigned char 类型却不输出,这是什么原因呢?
请大佬指点。
在计算机中,数字是以其补码表示的,正数的补码和原码相同,负数的补码为其绝对值的反码再加1.
因此对于一个字节的char类型,1的补码为00000001, -1的补码为11111111。
由于无符号数没有符号位,所以-1的补码11111111的第一位不再表示符号位,其值对应的十进制值就为255。
而cout对char类型的输出是输出其ascii码值代表的字符,也就是说这里应该输出ascii码为255的字符
ascii码128到255,用于表示框线、音标、欧洲非英语系字母。如图可以看到,255没有输出什么东西