位移左

时间:2009-10-22 00:19:23

标签: c++ c bit-manipulation bit-shift

假设我想将i向左移两次,并将值存储在f中。

f = i << 2;

这是对的吗?我究竟如何在C / C ++中做到这一点?

4 个答案:

答案 0 :(得分:9)

f = i << 2

移位在许多有点繁琐的操作中都很有用。

这曾经是将数字乘以4的好方法。但是,如今,优化编译器往往会为您解决这个问题。

请记住,最左边的两个位被丢弃。

答案 1 :(得分:8)

作为补充说明:尽管您的问题标记为C++,但值得注意的是C和C ++在转移负值方面采用了稍微不同的路径。在C ++中,对负值执行<<>>的结果是实现定义的。在C >>中是实现定义的,而<<生成未定义的行为

答案 2 :(得分:3)

是的,i << 2f = i << 2f <<= 2是人们可能想要做的事情。

要记住更多转移事项:

  • 您也有>>。在位级别,>>对有符号和无符号类型的工作方式不同。

  • <<>>的优先级低于+-的优先级,这会欺骗一些人,因为人们可能会认为它们更像是*/

答案 3 :(得分:0)

为了完整起见,您可以查看此页面:uow TEXTBOOK -> bitops.html