2016-06-10 77 views
-4

在C++中有转移operartionR中是否有移位操作?

>> right shift 
<< left shift 

这是考虑到是非常快的。
我试图在R中应用它,但它似乎是错误的。

在R中是否存在与此类似的操作?

在此先感谢。

+2

谷歌搜索“R移动运算符”会在第一次点击时显示答案。发布问题之前,您是否尝试找到答案? –

+1

更有建设性的评论:'''真的很有帮助。如果你输入'?? “转移”或“?在R控制台中“按位”,你很快就可以为R的按位运算符(包括移位运算符)提供帮助页面。 –

回答

5

您可以使用bitwShiftLbitwShiftR

bitwShiftL(16, 2) 
#[1] 64 

bitwShiftR(16, 2) 
#[1] 4 

这里是source code。根据这些函数中额外代码的数量以及*/是原语的事实来判断,这些将不可能比分割/乘以2的等效幂更快。在我的虚拟机之一,

microbenchmark::microbenchmark(
    bitwShiftL(16, 2), 
    16 * 4, 
    times = 1000L 
) 
#Unit: nanoseconds 
#    expr min  lq  mean median uq max neval cld 
# bitwShiftL(16, 2) 1167 1353.5 2336.779 1604 2067 117880 1000 b 
#   16 * 4 210 251.0 564.528 347 470 51885 1000 a 

microbenchmark::microbenchmark(
    bitwShiftR(16, 2), 
    16/4, 
    times = 1000L 
) 
# Unit: nanoseconds 
#    expr min  lq  mean median  uq max neval cld 
# bitwShiftR(16, 2) 1161 1238.5 1635.131 1388.5 1688.5 39225 1000 b 
#    16/4 210 240.0 323.787 280.0 334.0 14284 1000 a 

我还要指出的是,尝试微优化解释语言可能是在浪费时间。如果性能是一个非常重要的问题,那么您愿意在几个时钟周期内分割头发,那么首先使用C或C++编写程序。