我试图在视觉C中将16个十六进制值拟合为一个无符号的long long long
unsigned long long test = 0x1A2A00DABABA7890;
printf("long long value %X\n", test);
printf("%d", sizeof(test));
Run Code Online (Sandbox Code Playgroud)
我的输出显示它是8个字节,但仅在输出时存储前4个字节
long long value BABA7890
8
Run Code Online (Sandbox Code Playgroud)
我是不是误会了它的工作原理?谢谢你的帮助。
您的printf格式说明符与您的类型不匹配,这会导致未定义的行为。尝试:
printf("long long value %llX\n", test);
Run Code Online (Sandbox Code Playgroud)
%dsizeof结果的格式也是错误的。您应该在%zu那里使用。
如果您打开一些警告设置(clang例如,默认情况下会这样做),编译器可能会警告您:
example.c:6:30: warning: format specifies type 'unsigned int' but the argument
has type 'unsigned long long' [-Wformat]
printf("long long value %X\n", test);
~^ ~~~~
%llX
example.c:7:14: warning: format specifies type 'int' but the argument has type
'unsigned long' [-Wformat]
printf("%d", sizeof(test));
~^ ~~~~~~~~~~~~
%ld
2 warnings generated.
Run Code Online (Sandbox Code Playgroud)
编辑:我注意到在您的问题中,您正在使用VisualC。这 %z是C99功能,编译器可能不支持。在这种情况下,您应该查看文档以查看使用正确的格式。