首页 > 解决方案 > 如何在 cout 中使用按位移位?

问题描述

我正在尝试做类似的事情:

#include <iostream>

int main()
{
    std::cout << 1 << 5 << std::endl;
}

我预计 32(1 左移 5),但我得到 15。

我正在尝试使用这样的宏:

#define BIT_SHIFT(x,y) x << y
...
cout << BIT_SHIFT(1, 5) << std::endl;

这会发生。

为什么?我该如何解决?

标签: c++bit-shiftcout

解决方案


只需使用括号:

#include <iostream>

int main()
{
    std::cout << (1 << 5) << std::endl;
}

std::cout << 1 << 5表示“推到输出流第一个整数文字1,然后是整数5”。但是,添加括号会改变评估的顺序,并且1 << 5首先评估,从而产生std::cout << 32 << std::endl;表达式。


推荐阅读