~0 は、000000000 を 1111111111 に反転することを意味しますか?
printf("Check: %i", ~0);
printf の結果は -1 になるため、混乱しています。
-1 は基本的に 11111111111111111 ビットと同じ意味ですか?
~0 は、000000000 を 1111111111 に反転することを意味しますか?
printf("Check: %i", ~0);
printf の結果は -1 になるため、混乱しています。
-1 は基本的に 11111111111111111 ビットと同じ意味ですか?
~0 は、000000000 を 1111111111 に反転することを意味しますか?
はい、そうです。
-1 は基本的に 11111111111111111 ビットと同じ意味ですか?
2の補数表現では、そうです。
Does ~0 mean its flipping 000000000 to 1111111111?
はい、そういう意味です。
printf("Check: %i", ~0);
The printf results to -1, which is why I am confused.
これは、2 の補数演算が原因であり、従来は 0 を受け入れていました。
000000000000
それから1を引くには、レジスター全体を「ロール」するまで、借用を必要とする「借用」が必要です。
111111111111
000000000
論理的には、その数に「1」を追加すると、反対方向に「転がり」、再び降伏するまでキャリー、キャリー、というように繰り返されます。
Does -1 essentially mean the same thing as 11111111111111111 bits?
はい、2 の補数の符号付き整数を使用している限り。
---- cincutar の現在削除された投稿の詳細を含めるために編集されました (彼が削除しなければよかったのに) ---
(符号なし) 16 進数としてフォーマットされた同じメモリを表示するには、次のコマンドを使用します。
printf("Check: %x", ~0);
出力を印刷します
Check ffffffff
これは(16進数をよく読まない人のために)
11111111111111111111111111111111
~0 == 0xFFFFFFFF
ここで、 0xFFFFFFFF
= 32 x 1、これは2の補完表現の-1です。
は~
ビット演算であり、各ビットで0から1になります。
~0b1010 == 0b0101
これは、数学演算「2の補数」によるものです。2の補数の素晴らしいビデオチュートリアルはyoutubeで見つけることができます。これがそのうちの1つです:)