表示2的补数中的x所需的最小位数

我正在读一本书,练习如下:

/* howManyBits - return the minimum number of bits required to represent x in
 *             two's complement
 *  Examples: howManyBits(12) = 5
 *            howManyBits(0)  = 1
 *            howManyBits(-1) = 1
 *            howManyBits(0x80000000) = 32
 *  Legal ops: ! ~ & ^ | + << >>
 *  Max ops: 90
 *  Rating: 4
 */

int howManyBits(int x) {
    return 0;
}

我什至不了解问题本身,为什么12需要5位,不是1100,即4位?而为什么-1只需要1位呢? 1 ... 1不是二进制补码中的-1,所以需要32位吗?

iCMS 回答:表示2的补数中的x所需的最小位数

12为何需要5位,不是1100才4位吗?

使用二进制补码,则需要再增加1位才能对值的正负号进行分类。 (通常)这是位模式的最左位,也称为“ 最高有效位”(MSB)。如果该有符号位为1,则值为负;如果为0,则值为正。因此,您需要5位来表示值12 = 01100,而不是4。

-1只需要1位怎么办?

只有1位时,此位也用于值的有符号性,可以表示值0-1-1而非1,因为设置为1的有符号位表示负值。

,

一个位用来表示符号,0代表正,1代表负。例如,表示+12-12所需的最小位数为5:

+12 = 0 1100
-12 = 1 0100
,

12点和-1点都可以通过记住这是2的补码来解决。该问题要求最少的位数。

在2的补数值中,如果最高位是1,则该值为负。

1位2的补码可以表示2个值-10,分别具有位模式1b0b

如果您看一下可以表示以下内容的2位值,那就更清楚了:

-210b

-111b

000b

101b

请注意,1位2的补码值1b不代表1。同样,12需要5个位:01100b。 4位1100b的值为-4

本文链接:https://www.f2er.com/2013023.html

大家都在问