【发布时间】:2018-01-07 04:36:54
【问题描述】:
据我了解,当将 C 中的无符号整数右移多个位置时,左侧的空位将被零填充。
但是,我一直在尝试右移 ~0(即 1111...1111),但完全没有成功。尝试将其右移任意数量的位置都会产生相同的值,除非我在移位之前将整数存储在变量中:
#include <stdio.h>
int main() {
// Using an expression:
printf("%u \n", ~0);
printf("%u \n", ~0 >> 2);
unsigned int temp = ~0;
// Using a variable to store the value before shift:
printf("%u \n", temp);
printf("%u \n", temp >> 2);
return 0;
}
输出:
4294967295
4294967295
4294967295
1073741823
以任何一种方式执行左移 ~0 都非常好。我不确定这里发生了什么。
【问题讨论】:
-
printf("%u \n", ~0);是 ub,0是int文字。 -
~0的类型为int。使用%u格式打印它会产生未定义的行为。
标签: c bit bit-shift kernighan-and-ritchie