我正在尝试设置 long long unsigned x 中的最高有效位。 为此,我使用了这行代码:
x |= 1<<((sizeof(x)*8)-1);
我认为这应该可行,因为 sizeof 以字节为单位给出大小,所以我乘以 8 并减去 1 来设置最后一位。每当我这样做时,编译器都会发出警告:“警告:左移计数 >= 类型宽度”
我不明白为什么会出现这个错误。
最佳答案
您正在移动的 1
是 int
类型的常量,这意味着您正在将 int
值移动 sizeof(unsigned long long) * 8) - 1
位。这种转变很容易超过 int
的宽度,这显然是您的情况。
如果你想获得一些 unsigned long long
类型的位掩码掩码,你应该从 unsigned long long
类型的初始位掩码开始,而不是int
类型。
1ull << (sizeof(x) * CHAR_BIT) - 1
可以说构建相同掩码的更好方法是
~(-1ull >> 1)
或
~(~0ull >> 1)
关于c - 在 C 中设置最高有效位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31233452/