数据表示(整型)

一、有符号数向无符号数转换(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 2= 7

2. 有符号数据截断(w --> k )(w > k),先用用2k 对数据取模,然后转化为有符号数。

           例子:假设w=4,k=3,有符号数x=-1

           则截断后的值为 F mod 2= 7

                                 U2T3(7) = 7 - 2= -1

猜你喜欢

转载自becomebetter.iteye.com/blog/2204565
今日推荐