結果はこうだと思った(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