なぜこれは00001ではなく10010を返すのですか?
0110 >> 2 // 10010
ビットが2回右にシフトすると思いましたが、そうではありません。期待した出力は0001
または1でしたが、代わりに0を取得しました。どうしてこれなの?
なぜこれは00001ではなく10010を返すのですか?
0110 >> 2 // 10010
ビットが2回右にシフトすると思いましたが、そうではありません。期待した出力は0001
または1でしたが、代わりに0を取得しました。どうしてこれなの?
0110 はゼロで始まるため、 8 進定数です。
>>> 0110
72
>>> 0110 >> 2
18
>>> bin(_)
'0b10010'
これは Python ですが、8 進定数を持つ他の多くの言語 (Java、C、JavaScript など) でも同じことが言えます。すべての言語がバイナリ定数を提供しているわけではありません。それらがない場合は、代わりに 16 進数の定数を使用できます (たとえば、0b0110 は 0x6 です)。
数値は 2 進数ではなく、8 進数(基数 8) として解釈されます。8進数0110
は72
10 進数または1001000
2 進数です。右に 2 シフトすると、10010
ご覧のとおりになります。
先行ゼロが 8 進数を意味することは、プログラミング言語では一般的です。使用している言語によっては、バイナリ リテラルを指定する方法がある場合とない場合があります。
各ニブル (16 進数) は正確に 4 ビットであるため、2 進数を表すより一般的な方法は 16 進数を使用することです。
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 を使用します。