c++ - 按位移位使用什么整数类型作为移位大小?
问题描述
我正在尝试在 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++ 使用什么类型来表示移位大小?
解决方案
在 [expr.shift]/1 中有解释:(N4860)
操作数应为整数或非范围枚举类型,并执行整数提升
与大多数其他二元运算符不同,不执行通常的算术转换。整体提升 意味着在您的示例中,类型和操作数被提升为char
(short
在int
正常系统上),其他操作数保持不变。