c - 为什么这种按位右移似乎不起作用?

标签 c bit-manipulation bit-shift binary-operators not-operator

有人可以向我解释为什么掩码根本没有向右移动吗?您可以使用任何东西代替 1,结果都是一样的。

unsigned mask = ~0 >> 1;
printf("%u\n", mask);

最佳答案

这是一个类型问题。如果您将 0 转换为无符号的,那就没问题了:

unsigned mask = ~ (unsigned) 0 >> 1;
printf("%u\n", mask);

根据评论进行编辑:或使用更简洁的无符号文字表示法。 :)

unsigned mask = ~0u >> 1;
printf("%u\n", mask);

关于c - 为什么这种按位右移似乎不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/584015/

相关文章:

c++ - 将多个值存储在一个 int C++ 中的位操作

c - 为什么右移有两个选项? (算术/逻辑)

C++ 位移一个 float

c - C中 float 的准确精度

c - Microsoft 下拉列表组合框上的焦点指示器未显示(有时)

c - 将 .a 库与 CMake 链接

Android/SQLite - WHERE 子句上的位操作

swift - 对范围内的值进行位操作

c - 按位运算位检查

Linux 中的 C 程序生成文件