4

~0 は、000000000 を 1111111111 に反転することを意味しますか?

printf("Check: %i", ~0);

printf の結果は -1 になるため、混乱しています。
-1 は基本的に 11111111111111111 ビットと同じ意味ですか?

4

4 に答える 4

17

~0 は、000000000 を 1111111111 に反転することを意味しますか?

はい、そうです。

-1 は基本的に 11111111111111111 ビットと同じ意味ですか?

2の補数表現では、そうです。

于 2012-08-31T20:29:20.743 に答える
6
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
于 2012-08-31T20:33:08.593 に答える
3

~0 == 0xFFFFFFFF

ここで、 0xFFFFFFFF= 32 x 1、これは2の補完表現の-1です。

~ビット演算であり、各ビットで0から1になります。

~0b1010 == 0b0101
于 2012-08-31T20:30:38.660 に答える
3

これは、数学演算「2の補数」によるものです。2の補数の素晴らしいビデオチュートリアルはyoutubeで見つけることができます。これがそのうちの1つです:)

youtubeリンク

于 2012-08-31T20:31:28.387 に答える