私はVisual Studio 2013を使用しています。
最近~
、1の補数の演算子を試しました:
int a = 10;
cout << ~a << endl;
出力は-11
しかし、
unsigned int a = 10;
cout << ~a << endl;
出力は4294967296
-11
出力がsigned の場合である理由がわかりませんint
。この混乱を助けてください。
私はVisual Studio 2013を使用しています。
最近~
、1の補数の演算子を試しました:
int a = 10;
cout << ~a << endl;
出力は-11
しかし、
unsigned int a = 10;
cout << ~a << endl;
出力は4294967296
-11
出力がsigned の場合である理由がわかりませんint
。この混乱を助けてください。
数値 10 を 32 ビットの符号付きまたは符号なし整数に入れると、次のようになります。
0000 0000 0000 0000 0000 0000 0000 1010
それを否定すると、次のようになります。
1111 1111 1111 1111 1111 1111 1111 0101
これらの 32 ビットは、符号なし整数として 4294967285、または符号付き整数として -11 を意味します (コンピュータは、負の整数を2 の補数として表します)。また、32 ビットの浮動小数点数または 4 つの 8 ビット文字を意味する場合もあります。
ビットには「絶対的な」意味はありません。それらは、それらをどのように「見る」か (それらが持つタイプ) に応じて、何でも表すことができます。
メモリには、どちらの場合も 4294967285 が格納されています (4294967296 は正しくはタイプミス、33 ビットですか?)。この数値の意味は、使用する符号度によって異なります。
同じ数の異なる解釈。
キャストすることで署名なしとして再解釈できますが、同じ結果になります。
int a = 10;
cout << (unsigned int) ~a << endl;