CSAPP中也有对数字在计算机中的表示的讨论。
参考文章:
c++ for循环因size(),size_t,无符号数溢出死循环的问题
前言
当算术表达式中既有无符号数又有带符号数时,那么在进行运算之前,这个有符号数值会先被转换成无符号数!然后再进行运算。
无符号数和有符号数比较的时候,有符号数值也会先被转换成无符号数
有符号->无符号 转换规则
对于同样字节大小的 有符号数和无符号数,强制类型转换的结果保持位值不变,只是改变了解释位的方式。
unsigned a = 4294967295u; // Umax
int b =(int)a;
cout<<"a "<<a<<" b "<<b<<endl;
结果:
a 4294967295 b -1
可以看到,无符号的4294967295 和补码形式的-1 的 位模式是完全一样的。