考虑这个简单的例子:
unsigned long long int my_int=0b10100110; printf("%.64B\n",my_int<<40);
为什么输出为零?使用unsigned long long int(sizeof = 8),64位计算机,操作系统:Fedora 37、gcc(GCC)12.2.1 20221121(Red Hat 12.2.1-4)以及使用或不使用m64标志的编译。
unsigned long long int
nom7f22z1#
对于初学者,整型常量的格式如下
0b10100110
不是标准的。二进制整型常量在C++中有效。此外,函数printf不支持转换说明符B。在任何情况下,要输出unsigned long long int类型的对象,都需要在转换说明符之前使用长度修饰符ll。相反,您可以使用十六进制整数常量,例如
printf
B
ll
unsigned long long int my_int = 0xA6;
并输出为
printf("%#.8llx\n",my_int<<40);
在这种情况下,输出如下所示
0xa60000000000
或者正如**@chux - Reinstate Monica**在注解中正确指出的那样,您可以使用以下调用
printf("%#0.8llx\n",my_int<<40);
以在相应的自变量等于0时输出前缀0x。
0
0x
1条答案
按热度按时间nom7f22z1#
对于初学者,整型常量的格式如下
不是标准的。
二进制整型常量在C++中有效。
此外,函数
printf
不支持转换说明符B
。在任何情况下,要输出
unsigned long long int
类型的对象,都需要在转换说明符之前使用长度修饰符ll
。相反,您可以使用十六进制整数常量,例如
并输出为
在这种情况下,输出如下所示
或者正如**@chux - Reinstate Monica**在注解中正确指出的那样,您可以使用以下调用
以在相应的自变量等于
0
时输出前缀0x
。