1 背景知识
我的计算中:
- char 类型占 8 个比特位, unsigned char 类型能表示的数的范围为 0 ~ 2^8
-1,即 0 ~ 255,共 256 个数;
- int 类型占 32 个比特位,那么 unsigned 类型所能表示的数的范围为 0 ~ 2的32次方 - 1,即 0 ~4294967295,共 4294967296 个数
2 示例代码
int main() {
unsigned char a = -2 ;
unsigned char b = -258 ;
unsigned char c = 258 ;
int A = a ;
int B = b ;
int C = c ;
cout << "A = " << A << endl ;
cout << "B = " << B << endl ;
cout << "C = " << C << endl ;
int e = -42 ;
unsigned int i = 10 ;
cout << e + i << endl ;
return 0;
}
结果:
A = 254
B = 254
C = 2
4294967264
解释:
当我们赋值给无符号类型一个超出它表示范围的值时,结果是初始值对无符号表示数值总数取模后的余数。-2 mod 256 = -2 - 256*(-2/256) 下取整。-258 和 258 同理。
当一个表达式中既有无符号数又有int值时,那个int值就会转化为无符号数。 将-42转化为无符号数就是-42 % 4294967296。