为什么左移操作不起作用

why the left shift operation does not work

我有以下代码,我们在其中尝试左移一个值的某些位:

int main()
{
   unsigned long mvb = 1;

   mvb << 8;
   printf("The shift value is %u\n", mvb);

   mvb << 56;
   printf("The shift value is %u\n", mvb);
}

但是这两个操作的结果都是1,这是什么原因,如何正确使用?

你需要在移动后将它分配回mvb,如:

mvb = mvb << 8;

%uunsigned long 的错误格式说明符,因此程序行为未定义。请改用 %lu

请注意,您实际上并未更改 mvb 的值:printf 调用是对 mvb 的原始值进行操作。

编写 mvb <<= 8 是解决方法(这是使用按位左移赋值运算符),但请注意不要应用超出您类型中的位数的移位,因为那是 also C 中的未定义行为。为避免疑义,仅当您一次 移位太多位时才会出现未定义行为 :[=17 的后续移位=] 适合 64 位类型,但 mvb <<= (8 + 56) 而不是