~: ビット単位の否定演算子: データの各バイナリ ビットを否定します。つまり、1 を 0 に変換し、0 を 1 に変更します。 。
~x は -x-1
①正の数の元コード、逆コード、補コードはすべて同じ
②負の数の補数は、符号ビットが変更されず、残りのビットが反転され、1 が追加されることです
③元のコードの補数を見つける:Negate、1
④元のコードを見つける補数:Negate、1
#⑤負の数は補数に格納
⑥元のコードに対して反転演算が実行されます
⑦符号ビット、1は負の数を表し、0は正の数を表します
~(-2)
まず、コンピュータにおける -2 のバイナリ形式を知る必要があります。 ⑤と②から、
-2 元のコード: 1000 0000 0000 0010
-2 負のコード: 1111 1111 1111 がわかります。 1101 #符号ビットは変更されません。否定してください
-2 の補数: 1111 1111 1111 1110 #補数コード = 逆コード + 1
1111 1111 1111 1110 は、コンピューターの -2 のプロトタイプです
次に、それを否定し始めます。符号ビットは変更されません。
ビット単位の否定: 0000 0000 0000 0001
は明らかに正の数であり、元のコードはそれ自体であるため、出力は 1.
~2
2 元のコード、逆コード、補数コード: 0000 となります。 0000 0000 0010
ビット単位の否定: 1111 1111 1111 1101
これが負の数の場合はどうすればよいですか?直接聞いてもいいですか?
明らかにこれはあり得ません、⑥は、否定演算の計算結果は元のコードで実行されます、⑤も、負の数は補数コードに格納されます
1111 1111 1111 1101 です。 0000 0000 0000 0010 の補数ですが、必要なのは結果であり、コンピューター内のプロトタイプではありません。
がちょうどいいです。④ 元のコードを見つけるための補数: negate、1
Negate: 1000 0000 0000 0010
Add 1: 1000 0000 0000 0011
つまり、元のコードが得られます。 , 結果を計算できます
1000 0000 0000 0011 = -3
つまり、反転は非常に簡単ですが、反転が元のコードであるかどうか、および結果が次のコードであるかどうかに注意する必要があります。直接計算できます
Python では、反転記号を使用しても~ 想像した結果が得られません。ルールを要約すると、 (反転された値) です。 = - (反転前の値) -1
たとえば、1 を反転すると、1 の 8 ビット バイナリ表現は 0000 0001 となり、反転後の結果は次のようになります。 1111 1110、コンピュータの場合、1 で始まる 2 進数は負の数を表します。では、1111 1110 は負の値として正確に何を表しますか? この値を知りたい場合は、その補数を見つけることができます。つまり、最初に補数を取得します。 : 0000 0001、1:0000 0010 を追加します。これは、1111 1110 の元のコードが 0000 0010 であり、正の数 2 であることを示します。したがって、1111 1110 は負の数 -2 を表します
はい- 2 は反転されています。-2 のバイナリ表現は 2 の補数、つまり 0000 0010 > 1111 1101 > 1111 1110 です。-2 のバイナリ表現は 1111 1110 です。反転すると 0000 になります。 0001。明らかに、反転後の の値は 1 なので、~(-2)=1、~1=-2
要約は次のようになります: (否定後の値) = -(否定前の値)-1
以上がPythonで否定演算子を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。