理解表示负整数的offset-k方法

Max*_*kyi 1 binary

我正在阅读这篇关于表示负整数的 offset-k 方法的文章。有人可以用一些例子解释下面的段落吗:

表示有符号整数的一种逻辑方法是具有足够的二进制数范围,以便零可以偏移到正二进制数范围的中间。然后可以简单地从该零点减去负二进制数的大小。

我理解其中的机制,例如用 11 位表示数字 4,我会这样做4+1023=1027,但无法理解其背后的逻辑及其工作原理。

Vin*_*982 5

如果我们的数字范围是 -8 到 +8,我们可以通过将 8 添加到所有 or 数字来删除符号。那么数字将为 0 到 +16。这更像是改变比例(如将摄氏度转换为开尔文)以仅获得正值。

这种表示形式允许对有偏差的数字进行与无符号整数相同的操作,但实际上同时表示正值和负值。

该方法有几个名称:Excess-K,也称为偏移二进制偏置表示,使用固定值 K 作为偏置值。

值由比预期值大 K 的无符号数表示。

有偏表示现在主要用于浮点数的指数。IEEE浮点标准将单精度(32位)数的指数字段定义为8位excess-127字段。

为了更清楚地理解下面两个例子:

示例:1

4 位模式

0110 最高有效位的数字/列值为 8,因此 4 位模式被称为 Excess (8) 表示法。

  • 要转换此示例,请像标准二进制数一样查找整个模式的总和值:

    =(0 x 8) + (1 x 4) + (1 x 2) + (0 x 1 ) 
    =0      +   4      +   2     +   0
    =6 
    
    Run Code Online (Sandbox Code Playgroud)
  • 然后从总和中减去超出的值 8 (6 - 8)

  • 结果是一个带符号的值,-2。

实施例2

5 位模式

11110,最高有效位的数字/列值为 16,因此 5 位模式被称为 Excess (16) 表示法。

  • 要转换此示例,请像标准二进制数一样查找整个模式的总和值:

    (1x16) + (1x8) + (1x4) + (1x2) + (0x1)
    = 16   +    8  +   4   +   2   +   0
    = 30
    
    Run Code Online (Sandbox Code Playgroud)
  • 然后从总和中减去当前超出值 16 (30 - 16)

  • 结果是一个有符号值 + 14。

希望大家能够理清背后的逻辑,明白符号位0代表负号,1代表非负号来表示有符号值