C 无符号长类型的按位移位
在c程序中。我试图在uint64\u t变量上使用左移位运算符 例如C 无符号长类型的按位移位,c,bitwise-operators,C,Bitwise Operators,在c程序中。我试图在uint64\u t变量上使用左移位运算符 例如 //移位为24位 uint64_t x=0; x=((uint64_t)76)您使用了错误的格式说明符来打印输出。%d格式说明符需要一个int,它在您的系统上显然是32位的。因此,传递一个64位的值(以及一个无符号的值)会导致未定义的行为 应使用PRIu64宏为无符号64位值获取正确的格式说明符 printf("%"PRIu64"\n", x); 您使用了错误的格式说明符来打印输出。%d格式说明符需要一个int,它在您的系统
//移位为24位
uint64_t x=0;
x=((uint64_t)76)您使用了错误的格式说明符来打印输出。%d
格式说明符需要一个int
,它在您的系统上显然是32位的。因此,传递一个64位的值(以及一个无符号的值)会导致未定义的行为
应使用PRIu64
宏为无符号64位值获取正确的格式说明符
printf("%"PRIu64"\n", x);
您使用了错误的格式说明符来打印输出。%d
格式说明符需要一个int
,它在您的系统上显然是32位的。因此,传递一个64位的值(以及一个未签名的值)会导致未定义的行为
应使用PRIu64
宏为无符号64位值获取正确的格式说明符
printf("%"PRIu64"\n", x);
你用什么构造来检查x
的值?我只是用printf作为printf(“…%d\n”,x)打印出x的值;QED,然后,…%d
为int
s工作。使用“%llu
”啊,就是这样。要打印uint64\t
类型的值,你需要printf(“%PRIu64”\n,x)
@EugeneSh.和Andrey Chernyakhovskiy…感谢它按照u两人的建议工作:-)您使用什么构造来检查x的值
?我只是使用printf作为printf打印x的值(“…..%d\n”,x);那么QED<代码>%d
正在为int
s工作。使用“%llu
”啊,就是这样。要打印类型为uint64\u t
的值,需要printf(“%”PRIu64“\n”,x)代码>@EugeneSh。还有Andrey Chernyakhovskiy。。。谢谢,它按照u:-)和%lu的建议工作:
仅为无符号long
保留。在Windows机器上,通常为32位。@AndreyChernyakhovskiy谢谢。已应用编辑。%lu
仅保留用于无符号长字符
。在Windows机器上,通常为32位。@AndreyChernyakhovskiy谢谢。编辑已应用。