一、signed转换为unsigned
当int(16bit)时
signed类型整数,共16位。第一位为符号位,正数为0、负数为1,剩下15进行编码,存储范围为-215到215-1,即-32768到32767。
unsigned类型整数,16位全部用来编码,存储范围为0到216-1,即0到65536。
负数转化
因为负数一定会超出取值范围,所以在某些语言中将负数赋值为unsigned类型是非法的。在合法情况下,signed转换unsigned方法如下
- 取负数绝对值
- 取负数绝对值二进制码
- 取反码
- 反码最低位+1
如-2879(16bit),取绝对值为2879
二进制:0000 1011 0011 1111
取反码:1111 0100 1100 0000
反码+1:1111 0100 1100 0001
转换为16进制为F4C1
补充
signed是符号扩展,用符号位填充;unsigned是零扩展,高位全部置零