3

結果はこうだと思った(2**32 - 1)

#include <stdio.h>
int main(){
  unsigned int a = 0xffffffff;
  printf("the size of int a %d\n",a);
  return 0;
}

しかし、それは私-1に何か考えを与えますか?

4

4 に答える 4

9

間違ったフォーマット文字列を使用しています。%d符号付き 10 進数の int です。を使用する必要があります%u

printf渡す変数の型を認識しません。適切なフォーマット文字列を選択するのはあなた次第です。

于 2012-07-17T01:54:32.927 に答える
5

printf()その値を、範囲が-(2**31)~の符号付き整数として解釈するよう求めています(2**31)-1。基本的に上位ビットは符号ビットです。2 の補数について読んでください。

于 2012-07-17T01:53:41.207 に答える
0

%d は符号付き整数を表すためです。符号付き整数の場合、上位ビット (32 番目のビット) は、整数が負の場合、またはそうでない場合に設定されます。0xFFFFFFFF では上位ビットが設定されるため、符号付き整数にキャストすると、結果は負になります。上位ビットを数値自体の一部として扱うには、符号なしタイプを使用します

%lu or %u 
于 2012-07-17T01:55:44.317 に答える