2009-10-22 54 views
1

我该如何在C/C++中执行此操作? 比方说,我想将i左移两次,并将值存储在f中。逻辑左移

f = i << 2; 

这是正确的吗?

我不需要这一个程序或任何东西,我在它的工作原理只是感兴趣。谢谢。

+4

是的,这正是如何执行左位移。 – 2009-10-22 00:21:02

+0

非常感谢。 – nullArray 2009-10-22 00:21:34

回答

9

是的。

f = i << 2 

轮班在很多位操作中很有用。

这曾经是四乘一数的好方法。但是,现在,优化编译器往往会为您处理这些问题。

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

+3

对于Intel CPU,移出操作数的最后一位存储在进位标志中。这并没有增加相关的讨论,我只是想说。 – dreamlax 2009-10-22 02:56:05

0

为了完整起见,以帮助你与你的位操作,你可以看看这个页面:​​

3

是,i << 2f = i << 2,或f <<= 2万物都是一个可能想要做移位。

更多转向的事情要记住:

  • 你有>>为好。在位级,>>对签名和未签名类型的工作方式不同。

  • <<>>优先级低于的+-,这愚弄一些人,如人们想象他们更像*/

+0

我知道这是非常随意的,但我只是想让你知道,这个响应打开了一个lighbulb,帮助我修复了编写代码时遇到的最令人沮丧的错误。我将签名字符的所有实例都更改为无符号字符,并修复了错误。 – pg1989 2012-03-02 23:01:54

5

作为附加的注释:即使你的问题被标记C++,它可能是值得注意的是,C和C++采取略有不同的路径对于换挡负值。在C++中,对负值执行<<>>的结果是实现定义的。在C >>是实现定义的,而<<产生未定义的行为