結果はこうだと思った(2**32 - 1)
#include <stdio.h>
int main(){
unsigned int a = 0xffffffff;
printf("the size of int a %d\n",a);
return 0;
}
しかし、それは私-1
に何か考えを与えますか?
結果はこうだと思った(2**32 - 1)
#include <stdio.h>
int main(){
unsigned int a = 0xffffffff;
printf("the size of int a %d\n",a);
return 0;
}
しかし、それは私-1
に何か考えを与えますか?
間違ったフォーマット文字列を使用しています。%d
符号付き 10 進数の int です。を使用する必要があります%u
。
printf
渡す変数の型を認識しません。適切なフォーマット文字列を選択するのはあなた次第です。
printf()
その値を、範囲が-(2**31)
~の符号付き整数として解釈するよう求めています(2**31)-1
。基本的に上位ビットは符号ビットです。2 の補数について読んでください。
%d は符号付き整数を表すためです。符号付き整数の場合、上位ビット (32 番目のビット) は、整数が負の場合、またはそうでない場合に設定されます。0xFFFFFFFF では上位ビットが設定されるため、符号付き整数にキャストすると、結果は負になります。上位ビットを数値自体の一部として扱うには、符号なしタイプを使用します
%lu or %u