有符号和无符号的转换改变数值但不改变为表示
short int v = -12345;
unsigned short uv = (unsigned short) v; //uv的值将是53191
v和uv的二进制都是1100000011001
另外如果一个有符号和一个无符号比较,有符号将隐式转换为无符号
-1 < 0U; //求值为false
因为0是无符号,因此-1将转换为补码形式远大于0
如果两个数相加,发生溢出将截断,例如4位表示的两个数
9u + 12 u = 5;
同样补码相加也会发生正溢出和负溢出,因此两个正数相加可能得到负数,两个负数相加得到正数。
当对补码进行算术右移时(除法),如果是负数则将该负数加上2^k - 1(k是要移动的位数)。