0

如何在二进制有符号数(冗余二进制表示)中除以 2?换档行不通?

4

1 回答 1

0

冗余二进制表示只是以下形式的表达式:

\sum_{i=0}^n d_i 2^n

其中d_i's 是从一个更大的集合中提取的,而不仅仅是{0,1}.

除以二或右移到

\sum_{i=0}^{n-1} d_{i+1} 2^n + f(d_0)

诀窍在于如何处理d_0.

如果您的 RBR 有数字表格{0,1,2}并且最低有效数字为 2,那么您必须添加1到结果中以进行补偿,因此f(0) = 0, f(1) = 0,f(2) = 1应该可以工作。

  • 4 = 12_base2,所以12_base2 >> 1= 1 + f(2)= 1 + 1= 2_base2=2符合预期。
  • 6 = 102_base2,所以102_base2 >> 1= 10_base2 + f(2)= 11_base2=3

您可以通过设置d_i.{-1,0,1}f(-1) = -1

  • 1 = 1(-1)_base2,所以1(-1)_base2 >> 1= 1 + f(-1)= 1 - 1=0

因此,最终仅移位的幼稚方法确实有效,您只需要一个软糖因素来解释移位数字的任何冗余编码。

如果您选择的 RBR 包含更多选项,则需要相应地调整软糖因子。

于 2010-05-07T18:54:06.650 回答