假设我想将i
向左移两次,并将值存储在f
中。
f = i << 2;
这是对的吗?我究竟如何在C / C ++中做到这一点?
答案 0 :(得分:9)
是
f = i << 2
移位在许多有点繁琐的操作中都很有用。
这曾经是将数字乘以4的好方法。但是,如今,优化编译器往往会为您解决这个问题。
请记住,最左边的两个位被丢弃。
答案 1 :(得分:8)
作为补充说明:尽管您的问题标记为C++
,但值得注意的是C和C ++在转移负值方面采用了稍微不同的路径。在C ++中,对负值执行<<
或>>
的结果是实现定义的。在C >>
中是实现定义的,而<<
生成未定义的行为。
答案 2 :(得分:3)
是的,i << 2
,f = i << 2
或f <<= 2
是人们可能想要做的事情。
要记住更多转移事项:
您也有>>
。在位级别,>>
对有符号和无符号类型的工作方式不同。
<<
和>>
的优先级低于+
和-
的优先级,这会欺骗一些人,因为人们可能会认为它们更像是*
和/
。
答案 3 :(得分:0)
为了完整起见,您可以查看此页面:uow TEXTBOOK -> bitops.html