c++ - 如何在 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;
这会发生。
为什么?我该如何解决?
解决方案
只需使用括号:
#include <iostream>
int main()
{
std::cout << (1 << 5) << std::endl;
}
std::cout << 1 << 5
表示“推到输出流第一个整数文字1
,然后是整数5
”。但是,添加括号会改变评估的顺序,并且1 << 5
首先评估,从而产生std::cout << 32 << std::endl;
表达式。
推荐阅读
- azure - 函数“SignalR”的侦听器无法启动。Azure 函数与信号器绑定
- javascript - 选中复选框时如何显示/隐藏列
- elasticsearch - 术语与术语查询的评分不同
- mysql - SQL:选择所有商品已过期的所有客户
- arrays - 同时操作多个阵列
- swift - UIControl 中的 UITextField
- javascript - 我尝试使用 Javascript 将段落元素的内容传递到联系表单的字段中
- python - ArgumentParser Python 中同一参数的多个选项
- java - 尽管提供了正确的凭据,Spring Security 仍不断返回 401 Unauthorized code
- oracle-apex - APEX 19.2:命令行实用程序 APEXExport 引发错误