【发布时间】:2016-02-25 18:04:38
【问题描述】:
在一个 c 程序中。我正在尝试对 uint64_t 变量使用左移运算符。
例如
// with shift of 24 bits
uint64_t x = 0;
x = (((uint64_t)76) << (24));
Output is: x = 1275068416
---------------------------------------------
// with shift of 32 bits
uint64_t x = 0;
x = (((uint64_t)76) << (32));
Output is: x = 0
如果我执行左移直到 24 位,那么它工作正常,但在 32 位时它输出 0。而我认为是 uint64_t 的大小,即 unsigned long long 是 64 位。那么它不应该在 64 位移位之前工作吗?
【问题讨论】:
-
你用什么结构来检查
x的值? -
我只是使用 printf as printf("....%d\n", x); 打印出 x 的值;
-
QED,然后..
%d正在为ints 工作。使用“%llu” -
啊,就是这样。要打印
uint64_t类型的值,您需要printf("%"PRIu64"\n", x);。 -
@EugeneSh。和 Andrey Chernyakhovskiy ...谢谢它按照你们俩的建议工作:-)
标签: c bitwise-operators