您的位置:首页 > 理论基础

[深入理解计算机系统]第二章-信息的表示与处理

2013-08-27 10:34 453 查看
1.对于无符号与有符号之间的强制类型转化,低层的位表示不变。

2.C语言在执行运算的时候,如果他的一个运算数是有符号的而另一个是无符号的,那么C语言会隐式的将有符号参数强制转化为无符号参数,然后再执行运算。

例如2147483647 > -2147483647-1 

但是,2147483647U < -2147483647-1       (注意,2^31=2147483648)

因为,第二个运算涉及有符号与无符号的运算,C语言会隐式的将有符号参数强制转化为无符号参数,故-2147483647-1=-2147483648,位表示为10000.....0000,在无符号数里面,即为2147483648,所以才会有2147483647U < -2147483647-1 这样的错误产生。

3.将一个较小的数据类型转化为一个较大的数据类型。

对于无符号数,只需开头补零。

对于有符号数,只需开头补最高位。

例如,原始值为11001000,转化到最高位就是1111111111001000,即在前面补最高位(这里原始值的最高位为1)。

解释:补出的位数与原始值的最高位合计起来,其值刚好不影响结果。

再比如,

short sx = -12345;

unsigned int sy = sx;

那么sy的结果是多少呢?

分析:short型的是2位,unsigned int 是4位。

12345 = ox3039 = 0011000000111001,取反加一得-12345的存储值:1100111111000111 = oxcfc7

按最高位补开头,

sy = 1111111111111111 1100111111000111 = 4294954951
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  计算机 c语言 编程