#include <stdio.h>
int main() {
unsigned long long int num = 285212672; //FYI: fits in 29 bits
int normalInt = 5;
printf("My number is %d bytes wide and its value is %ul. A normal number is %d.\n", sizeof(num), num, normalInt);
return 0;
}
を出力します。
My number is 8 bytes wide and its value is 285212672l. A normal number is 0.
この予期せぬ結果は、unsigned long long int
を印刷したことによるものだと思います。unsigned long long intを
printf()` するには?
ll (el-el) long-long 修飾子を u (unsigned) 変換で使用します。(Windows, GNUで動作します)。
printf("%llu", 285212672);
一つの方法は、VS2008でx64としてコンパイルすることです。
これは期待通りに動きます。
int normalInt = 5;
unsigned long long int num=285212672;
printf(
"My number is %d bytes wide and its value is %ul.
A normal number is %d \n",
sizeof(num),
num,
normalInt);
32ビットのコードでは、正しい__int64形式の指定子%I64uを使用する必要があります。つまり、次のようになります。
int normalInt = 5;
unsigned __int64 num=285212672;
printf(
"My number is %d bytes wide and its value is %I64u.
A normal number is %d",
sizeof(num),
num, normalInt);
このコードは、32ビットと64ビットの両方のVSコンパイラで動作します。