• 締切済み

否定演算について

正の数の否定演算~は必ず負になるのですか? Pythonで~1とすると-2と出るのですが ビット演算を説明している参考サイトによると(8bitを例にすると)だと1つまり00000001の否定は11111110となるようなことが書かれてます そうなると254との違いが解らないのですが、どう判断するのでしょうか? 正は負に負は正になるという記述が見当たらなかったので質問しました。 よろしくお願いいたします。

みんなの回答

  • _kappe_
  • ベストアンサー率68% (1581/2304)
回答No.2

同じビットパターンを、符号なし整数として解釈するか2の補数で表された符号付き整数として解釈するかの違いです。さらに違う解釈もありますがここでは触れません。 8ビット幅の場合: 2進数11111110は ・符号なし整数(0~255)ならば10進数の254 ・符号付き整数(-128~127)ならば10進数の-2 10ビット幅の場合: 2進数0011111110は ・符号なし整数でも符号付き整数でも10進数の254 2進数1111111110は ・符号なし整数(0~1023)ならば10進数の1022 ・符号付き整数(-512~511)ならば10進数の-2 Pythonの中では整数は基本的に全て2の補数表現による符号付き整数です。なので、正の値を ~ でビット反転したら必ず負の値になりますし、負の値をビット反転したら必ず正の値になります。ただし、この場合0は正の値に含みます。

  • maiko04
  • ベストアンサー率17% (345/1956)
回答No.1

否定(not)演算は00000001の否定は11111110です。 -2と254との違いですが、 8ビットを考えると表せる数は0から255までですよね。 負の数は表せないわけです。 そこで255に1を足したら256、9ビット目にオーバーフローして 値は0になりますね。 なので255ではなく-1と定義するわけです。 そうして-128から127まで表すことができるようになります。

関連するQ&A