扩展一个数字的位表示和截断数字

来源:互联网 发布:java 数据结构和特点 编辑:程序博客网 时间:2024/05/17 01:13

、扩展一个数字的位表示

一种常见的运算是在不同字长的整数之间转换,例如,从一个较小的数据类型转换到一个较大的数据类型。

将一个无符号数转换为一个更大的数据类型,只需要简单地在表示的开头添加 0,这种运算称为零扩展

将一个补码数字转换为更大的数据类型要执行符合扩展,规则是在表示中添加最高有效位的值的副本。如果原始的位表示为这里写图片描述,那么扩展后的位表示为这里写图片描述

下面证明符号扩展是正确的,即证明下式:

这里写图片描述

表达式的左边增加了k位这里写图片描述的副本。采用的是数学归纳法,即证明符号扩展一位保持数值不变,那符号扩展任何位都保持这种属性。

这里写图片描述

根据定义展开,

这里写图片描述

、截断数字
例如,在一台32位机上,将 int类型强制转换为short时,就会将32位的int截断为16位的,将一个w位的数这里写图片描述截断为一个k位数字时,将会丢弃高w-k位,得到一个位向量这里写图片描述,截断一个数字可能会改变一个它的值,这是溢出的一种形式。

对于一个无符号数 x,截断它到k位,相当于计算这里写图片描述,通过下式计算得到:
这里写图片描述

对于一个补码数字 x, 相似的推理可知道,

这里写图片描述,也就是,这里写图片描述 能都被位级表示为 这里写图片描述,不过,一般而言,这个被截断的数字被视为有符号的,这将得到数值 这里写图片描述

这里写图片描述

参考:深入理解计算机系统(第二版)

0 0
原创粉丝点击