質問

私は非常に基本的なクエリを持っています。 次のコードの場合:

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です。

言い換えれば、それは「負の標識を落とす」ことを除いて、それ以外は「単に負の符号を落とす」ということです。

他のヒント

intunsigned intに変換するときに、値が負の場合、結果はその負の値がunsigned intが保持できるものよりも大きい数値に追加されているかのようになります。これはC90以降のC標準によって指定されており、機械が2の補数、自分の補数または符号付きの大きさの表現を使用するかどうかにかかわらず保持されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top