0

为什么返回 10010 而不是 00001?

0110 >> 2 // 10010

我认为这些位会向右移动 2 次,但事实并非如此。我期望的输出是0001or 1 但我得到了 0 。为什么是这样?

4

2 回答 2

2

0110 是一个八进制常数,因为它以零开头:

>>> 0110
72
>>> 0110 >> 2
18
>>> bin(_)
'0b10010'

这是 Python,但许多其他具有八进制常量的语言(Java、C、JavaScript ......)也是如此。并非所有语言都提供二进制常量。如果您没有它们,您可以使用十六进制常量(例如,0b0110 是 0x6)。

于 2013-02-17T02:14:47.830 回答
1

您的数字不会被解释为二进制,而是八进制(以 8 为底)。八进制011072十进制或1001000二进制。当您右移 2 时,就变成10010了您所看到的。

在编程语言中,前导零表示八进制是很常见的。根据您使用的语言,可能有也可能没有指定二进制文字的方法。

表达二进制数的更通用方法是使用十六进制,因为每个半字节(十六进制数字)正好是 4 位。

0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111

因此,要制作 0110(二进制),我们将使用 0x6。要制作 01101101,我们将使用 0x6D。

于 2013-02-17T02:13:43.637 回答