一、有符号数向无符号数转换(w位)
x +2w , x < 0
T2Uw(x)= {
x, x >= 0
二、无符号数向有符号数转换(w位)
x, x < 2w-1
U2Tw(x) = {
x - 2w, x >= 2w-1
三、无符号数与有符号数在运算中的转换规则
如果一个运算中,一个操作数是有符号型,另一个是无符号型,C语言隐式地将有符号型操作数转为无符号型操作数进行运算,就像此运算中没有负数一样。
例子: -1 < 0 结果为1
-1 < 0U 结果为0
四、扩展数字的位表示(比如 short型 转化为int型)
1.将一个无符号数扩展为较大的一个数,可以简单地将扩展位赋值为0。
例子:short a = -12345;
unsigned int b = a;
则b的位表示为00 00 cf c7
2.将一个有符号数扩展到较大的一个数,拷贝最高位到扩展位中。
例子:short a = -12345;
int b = a;
则b的位表示为ff ff cf c7
五、截断数字的位表示(比如int型转为short型)
1. 无符号型数据截断(w --> k )(w > k),可以用2k 对数据取模。
例子:假设w=4,k=3,无符号数x=F
则截断后的值为 F mod 23 = 7
2. 有符号数据截断(w --> k )(w > k),先用用2k 对数据取模,然后转化为有符号数。
例子:假设w=4,k=3,有符号数x=-1
则截断后的值为 F mod 23 = 7
U2T3(7) = 7 - 23 = -1