質問
私は非常に基本的なクエリを持っています。 次のコードの場合:
int i = -1;
unsigned int j = (unsigned int) i;
printf("%d",j); // I get 65535 the int limit in turbo C 16 bit compiler
.
否定的な標識を落とすべきではありませんか、それは限界を折り返しますか?
解決
負の数を表すために最も一般的に使用される方式は、 2の補数と呼ばれます。この方式では、-1
には、1
のすべての1111 1111 1111 1111
ビットのビットパターンがあります。符号なし整数として解釈された場合、これはあなたのキャスト手段であるものです、それは65535です。
他のヒント
int
をunsigned int
に変換するときに、値が負の場合、結果はその負の値がunsigned int
が保持できるものよりも大きい数値に追加されているかのようになります。これはC90以降のC標準によって指定されており、機械が2の補数、自分の補数または符号付きの大きさの表現を使用するかどうかにかかわらず保持されます。
所属していません StackOverflow