<<的整数运算

use*_*261 1 c++ operators

我最近看到了许多类似的代码示例

1 << 20 
Run Code Online (Sandbox Code Playgroud)

虽然我知道这个运算符可以用于整数,但我不确定它的作用,我尝试做的每一个谷歌搜索都会返回关于cout <<整数运算但没什么的东西.有人能告诉我这个运算符对整数的作用吗?

Pra*_*rav 11

<<明智的左移操作员

C++ 03 [ 5.8/2]

E1 << E2的值是E1(解释为位模式)左移E2位位置; 空位是零填充的.如果E1具有无符号类型,则结果的值为E1乘以上升到功率E2的数量2,如果E1的类型为无符号长,则减少模ULONG_MAX + 1,否则为UINT_MAX + 1.[注意:标题中定义了常量ULONG_MAX和UINT_MAX).]

此外,在表达式E1 << E2if中E1具有有符号类型和负值时,行为是未定义的.

这意味着-1 << 4调用UB.

  • 为了扩展Prasoon Saurav的答案,`1 << 20`等于'100000000000000000000`(二进制数,当然!)(1后跟20个零) (4认同)
  • 哇哇,它等于*二进制*中的'1000 ... 00`.这相当于`1*2 ^ 20`. (3认同)