当前位置:网站首页 > 技术博客 > 正文

左移右移运算符号



按位移位运算符包括右移运算符(,它将整数或枚举类型表达式的位向右移动)和左移运算符(,它将位向左移动)。 1




左移运算符将导致 中的位向左移动 所指定的位数。 因移位运算而空出的位上将用零填充。 左移是逻辑移动(从末端移掉的位将被舍弃,包括符号位)。 有关按位移位的类型的详细信息,请参阅按位移位。

以下示例将显示使用无符号数字的左移运算。 该示例通过将值表示为 bitset 来显示对位的操作。 有关详细信息,请参阅 bitset 类。

 

如果你左移有符号的数字,以至于符号位受影响,则结果是不确定的。 以下示例将显示 1 位左移到符号位时所发生的情况。

 

右移运算符将导致 中的位模式向右移动 所指定的位数。 对于无符号数字,因移位运算而空出的位上将用零填充。 对于有符号数字,符号位用于填充空出的位。 也就是说,如果数字为正,则使用 0;如果数字为负,则使用 1。

以下示例显示使用无符号数字的右移运算:

 

下一示例显示使用符号为正的数字的右移运算。

 

下一示例显示使用符号为负的整数的右移运算。

 

移位运算符两侧的表达式必须是整数类型。 整型提升将根据标准转换中描述的规则执行。 结果的类型与提升后的 类型相同。

在下面的示例中, 类型的变量将提升为

 

如果 为负或 大于或等于 (提升后)中的位数,则移位运算的结果是不确定的。 如果 为 0,移位运算不会执行。

 

1 以下是 C++11 ISO 规范 (INCITS/ISO/IEC 14882-2011[2012]) 5.8.2 和 5.8.3 两节中对移位运算符的说明。

的值是 向左移动 位的结果,空出的位用零填充。 如果 属于无符号类型,则结果的值为 E1 × 2E2,约减的模一大于结果类型可表示的最大值。 否则,如果 属于有符号类型且为非负值,E1 × 2E2 可由结果类型的相应无符号类型表示,则该值转换为结果类型后即为得到的值;否则,该行为是不确定的

的值是 向右移动 位的结果。 如果 属于无符号类型或 属于有符号类型且为非负值,则结果值为 E1/2E2 之商的整数部分。 如果 属于有符号类型且为负值,则结果值由实现决定。

版权声明


相关文章:

  • 一句话木马教程2024-11-04 09:30:03
  • linux中chmod是什么意思2024-11-04 09:30:03
  • c语言指针数组与数组指针2024-11-04 09:30:03
  • 什么是倒排索引技术2024-11-04 09:30:03
  • js判断数据类型typeof2024-11-04 09:30:03
  • 串口调试助手使用说明2024-11-04 09:30:03
  • 命令模式的缺点2024-11-04 09:30:03
  • css按钮样式代码2024-11-04 09:30:03
  • ubuntu1804中文输入法安装2024-11-04 09:30:03
  • win10突然什么软件都打不开2024-11-04 09:30:03