、、のサンプル問題がありw=1
、解決策はですが、理由がわかりませんか?y=7
z=0
x = ~(w && y) | y;
x = -1
これが私の思考プロセスです:
(w && y)=(1 && 7)= 1〜1
1 inビットは
〜1in
ビットです0000 0001
1111 1110
ここから何をすべきかわからない。
、、のサンプル問題がありw=1
、解決策はですが、理由がわかりませんか?y=7
z=0
x = ~(w && y) | y;
x = -1
これが私の思考プロセスです:
(w && y)=(1 && 7)= 1〜1
1 inビットは
〜1in
ビットです0000 0001
1111 1110
ここから何をすべきかわからない。
最後のステップはビットごとのORであるため、次のようになります。
1111 1110 | 0000 0111 = 1111 1111
これは-1です。
ビット単位の〜1は1111 1110
、
1111 1110
または0000 0111
であり1111 1111
、1111 1111
-1です。最上位ビットは負のフラグであり、負の数は減法混色です。そのため、符号付きバイトは-128まで保持できますが、127までしか保持できません。
あなたは正しい~(w && y)
です1111...0
。の最後のビット7
は1
であるため、|
これを7で指定すると、、1111...1
またはが得られ-1
ます。
まず、ビット演算&
の代わりにを使用する必要があります。&&
次に、~1 = 111...1110
計算後、 y
(7)とORを1111..1111
とって、-1の2の補数表現を取得します。