两个补充表格所需的最小比特数

时间:2013-12-07 00:18:31

标签: c++ assembly bit twos-complement

在我的中期,有一个问题说明:

给定十进制值,在二进制补码表单中表示每个数字所需的最小位数是多少?

值为:-26,-1,10,-15,-4。

我没有得到任何正确的问题,解决方案令人困惑。

我真正理解的唯一部分是找到值所在的范围。例如,-15将在[-2 ^ 5,2 ^ 5]的范围内,并且-4将在[-2 ^ 2,2 ^ 2]的范围内。从这里需要哪些步骤才能找到需要多少位?

我尝试找到一些模式来解决它,但它只适用于前两种情况。这是我的尝试:

  1. 首先,我找到了范围。 -2 ^ 6< -26< 2 ^ 6

  2. 然后我找到了2 ^ 6 = 32的值。

  3. 然后我找到了“最近”界限与值之间的差异。

  4. -26 - (-32)= 6

    同样,这对于前两个值偶然起作用,现在我很难找到以二进制补码形式表示的整数所需的位数与实际整数之间的实际关系。

    提前致谢!

1 个答案:

答案 0 :(得分:6)

首先,你的权力是2. 32 = 2 5

无论如何,我跟着你完成了前两步。你的最后一步没有意义。

  1. 找到括号的二次幂范围。你想要一个2的幂范围[-2 N ,2 N - 1]。因此,对于-26,这将是-2 5 ≤-26≤2 5 - 1.这相当于-32≤-26≤31。
  2. 2s补码表示的位数将简单地为N加1.“加1”表示符号位。对于-26,那是5 + 1 = 6.
  3. 所以,对于你给出的每个数字:-26,-1,10,-15,-4。

    • -2 5 ≤-26≤2 5 - 1变为-32≤-26≤31,得到5 + 1 = 6.
    • -2 0 ≤-1≤2 0 - 1变为-1≤-1≤0,得到0 + 1 = 1.
    • -2 4 ≤10≤2 4 - 1变为-16≤10≤15,得到4 + 1 = 5.
    • -2 4 ≤-15≤2 4 - 1变为-16≤-15≤15,得到4 + 1 = 5.
    • -2 2 ≤-4≤2 2 - 1变为-4≤-4≤3,得到2 + 1 = 3.

    知道了吗?

    -1一个很棘手......