0

可能重复:
C++ 中的“<<”运算符是什么?

在我正在查看的一段代码中,发生了以下情况:

... (header[4] << 8) + header[5] ...

我对编程相当陌生,以前从未见过 << 运算符。谷歌搜索没有提供任何结果。任何快速指示将不胜感激!

4

1 回答 1

5

<<运算符将位向左移动N 位,其中 N 在运算符之后。在您的示例中,地址处的位header[4]向左移动了 8 位。

这有什么好处是它有效地导致乘以 256,因为 2^8 = 256。如果向右移动,则值header[4]除以2^8 = 256。

一些真实的位级示例:

  • 值 2(二进制的 0010)右移2位变为 1000,结果为 8。
  • 值 7(二进制的 0111)向左移动2 位变为 0001),结果为 1。(7/4 是 1.75,因为无法用整数二进制值表示小数,所以会向下舍入)
  • 31 的值(二进制的 11110)向左移动3 位变为 00011,这导致值为 3。(实际上它变为 3.785,但它被向下舍入)

所以最后,位移通常意味着乘法(向左移动)或除法(向右移动),因为这就是它的结果。也就是说,您实际上可以用 2 的幂值替换乘法和除法位移,或用乘法替换位移。编译器通常更喜欢用移位次数来代替乘法和除法,因为对于计算机来说,移位比实际进行值的实际乘法或除法要快得多。

于 2012-11-10T16:04:35.340 回答