首页 > 解决方案 > 按位移位使用什么整数类型作为移位大小?

问题描述

我正在尝试在 C++ 中查找有关 shift 大小类型的信息。例如:

int x = 1;

char char_var = 1;
short short_var = 1;
int int_var = 1;
long long_var = 1;
long long long_long_var = 1;

x = x << char_var;  // works
x = x << short_var; // works
x = x << int_var;   // works
x = x << long_var;   // works
x = x << long_long_var;   // works

那么 C++ 使用什么类型来表示移位大小?

标签: c++bit-manipulationbit-shift

解决方案


在 [expr.shift]/1 中有解释:(N4860)

操作数应为整数或非范围枚举类型,并执行整数提升

与大多数其他二元运算符不同,不执行通常的算术转换。整体提升 意味着在您的示例中,类型和操作数被提升为charshortint正常系统上),其他操作数保持不变。


推荐阅读