Python 練習例55
問題:ビット否定(~)の使い方を学びます。
説明:
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)
# -*- 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です。