【发布时间】:2021-09-27 11:50:02
【问题描述】:
我正在阅读this article 关于表示负整数的 offset-k 方法。有人可以用一些例子解释以下段落:
表示有符号整数的一种逻辑方式是有足够的范围 在二进制数中,以便零可以偏移到中间 正二进制数的范围。那么负数的大小 二进制数可以简单地从那个零点减去。
我了解机制,例如用 11 位表示数字 4,我会做 4+1023=1027,但无法理解它背后的逻辑以及它为什么起作用。
【问题讨论】:
标签: binary
我正在阅读this article 关于表示负整数的 offset-k 方法。有人可以用一些例子解释以下段落:
表示有符号整数的一种逻辑方式是有足够的范围 在二进制数中,以便零可以偏移到中间 正二进制数的范围。那么负数的大小 二进制数可以简单地从那个零点减去。
我了解机制,例如用 11 位表示数字 4,我会做 4+1023=1027,但无法理解它背后的逻辑以及它为什么起作用。
【问题讨论】:
标签: binary
如果我们有从 -8 到 +8 的数字,我们可以通过将 8 添加到所有或数字来删除符号。然后数字将是 0 到 +16。这更像是移动刻度(如将 Celsius 转换为 Kelvin)以获得正值。
这种表示允许对有偏数的运算与对无符号整数的运算相同,但实际上同时表示正值和负值。
这个方法有几个名字——Excess-K,也叫offset binary或biased representation,使用一个固定值K作为一个偏差值。
一个值由比预期值大 K 的无符号数表示。
有偏表示现在主要用于浮点数的指数。 IEEE 浮点标准将单精度(32 位)数的指数字段定义为 8 位超 127 字段。
为了更清楚地理解下面的两个例子:
4 位模式
0110 最高有效位的数字/列值为 8,因此 4 位模式称为 Excess (8) 表示法。
要转换这个例子,找到整个模式的总和值,就像一个标准的二进制数一样:
=(0 x 8) + (1 x 4) + (1 x 2) + (0 x 1 )
=0 + 4 + 2 + 0
=6
然后从总和中减去超出值 8,(6 - 8)
结果是一个有符号值,-2。
5 位模式
11110,最高有效位的数字/列值为 16,因此 5 位模式称为 Excess (16) 表示法。
要转换这个例子,找到整个模式的总和值,就像一个标准的二进制数一样:
(1x16) + (1x8) + (1x4) + (1x2) + (0x1)
= 16 + 8 + 4 + 2 + 0
= 30
然后从总和 (30 - 16) 中减去当前的超出值 16
结果是一个有符号值,+14。
希望能理清背后的逻辑,明白符号位0代表负号,1代表非负号表示有符号值
【讨论】: