Python 練習例55

Python 100例

問題:ビット否定(~)の使い方を学びます。

説明:

2進数はメモリ内では2の補数の形式で格納されます。

ビット否定:2進数の各ビットを反転させ、0は1に、1は0になります。

最上位ビットは符号ビットであり、正の数の符号ビットは0、負の数は1です。

正の数では、最上位ビットが0で、残りの各ビットは数値自体を表します(2進数で)。例えば、+42の2の補数は00101010です。

負の数の場合、その数の絶対値の2の補数をビット反転し、その後、全体に1を加えると、その数の2の補数になります。例えば、-42の2の補数は11010110です(00101010をビット反転して

11010101+1、すなわち11010110)。

~9 の計算手順:

转二进制:0 1001
计算补码:0 1001
按位取反:1 0110

原符号表現に変換:

按位取反:1 1001  
末位加 1:1 1010
符号位为 1 是负数,即 -10

実例

#!/usr/bin/python
# -*- coding: UTF-8 -*-

a = 7
b = ~a

c = -7
d = ~c

print ('変数 a の反転結果は: %d' % b)
print ('変数 c の反転結果は: %d' % d)

上記の例の出力結果は次のとおりです:

变量 a 取反结果为: -8
变量 c 取反结果为: 6

説明:

  • ~77に対してビット反転を行うと、7の2の補数は00000111、補数をビット反転すると11111000が得られます。最上位ビットの1が符号ビットで負数を表すため、その補数に対応する整数は-8です。

  • ~-7-7に対してビット反転を行うと、-7の2の補数は11111001、補数をビット反転すると00000110が得られます。最上位ビットの0が符号ビットで正数を表すため、その補数に対応する整数は6です。

Python 100例

その他の拡張