为什么符号位的扩展,不改变数值的大小

符号位的扩展是在计算机中表示有符号数时经常用到的一种技术,特别是在进行不同位数之间的数据转换时。理解符号位扩展的关键在于掌握有符号数的表示方法和二进制补码的概念。

  1. 有符号数的表示
    在计算机中,有符号数通常使用二进制补码(Two’s Complement)来表示。在补码表示法中:

最高位是符号位,0 表示正数,1 表示负数。
剩余位表示数值的大小。
例如,一个 8 位二进制数可以表示的范围是 -128 到 127。

  1. 符号位扩展的概念
    符号位扩展是将一个较窄位数的有符号数转换为一个更宽位数的有符号数,同时保持其数值不变。例如,将一个 8 位有符号数扩展为 16 位有符号数。

  2. 符号位扩展的方法
    符号位扩展的方法是复制原数的符号位,填充到新增的高位上。具体步骤如下:

确定原数的符号位:查看原数的最高位(符号位)。
扩展符号位:在新增的高位上填充与原符号位相同的值。
4. 示例
示例 1:正数扩展
假设有一个 8 位正数:0000 1101(十进制为 13)。

扩展为 16 位:

原数: 0000 1101
扩展后: 0000 0000 0000 1101
因为原数是正数,符号位是 0,所以扩展后的高位全部填充 0。

示例 2:负数扩展
假设有一个 8 位负数:1111 0011(十进制为 -13,使用补码表示)。

扩展为 16 位:

原数: 1111 0011
扩展后: 1111 1111 1111 0011
因为原数是负数,符号位是 1,所以扩展后的高位全部填充 1。

  1. 为什么不改变数值大小
    符号位扩展不改变数值大小的原因是,扩展后的数在补码表示下的实际值与原数相同。因为数值是要还原成原码的,即使符号位扩展,多余的符号位从补码还原成原码的过程中,除了最高位的符号位保持不变外,其余扩展位的都变为0,因此,扩展位实质对原码大小不造成任何影响。

  2. 注意事项
    符号位扩展只适用于有符号数。
    无符号数进行位数扩展时,通常是在高位填充 0(这称为“零扩展”)。
    符号位扩展与算术移位(如左移、右移)不同,后者可能会改变数值的大小或符号。
    通过理解符号位扩展的原理和方法,可以更好地处理不同位数之间的有符号数转换,确保数值的正确性。

在计算负数的补码的时候,计算方式虽然有三种,但是本质都是一样的,都是用的2^N - 负数的绝对值。负数的绝对值要记得是最高位变为0的。负数最高位为1。在进行整数类型的定点数表示时,Vs =
在这里插入图片描述
W为最高符号位,i为第i个数据,范围从0 - w-1 ,这个公式也是在说明 有符号负数的补码求取方式:2^N - 负数的绝对值,前面一项为 2 ^ N ,后面的求和公式为 负数的绝对值。

有符号纯小数的求取方式(规定的小数点再最高位旁边):如果最高位为1,说明为负数,那么求这个数的补码之后,再按照小数部分每个bit位的权重来计算,比如 11111,那么补码时10001,那么1的权重就是 1/2^4,4 是小数位所在的位置。

如果是小数+整数(也就是 规定的小数点的位置在中间),那么整数部分就按照整数的求取方式,小数部分的就按照小数部分的求取方式,最后相加就行。但是由于如果最高位为负数,小数和整数部分的求和可以合并。

定点数的格式或者浮点数的格式来实现计算,需要让固定位置具有特殊含义的数值运算满足运算规则,因此需要一定的资源开销来实现这个功能,浮点数的运算规则的映射,相比定点数消耗的资源要多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值