C 无符号长类型的按位移位

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,它在您的系统

在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
,它在您的系统上显然是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谢谢。编辑已应用。