在c ++中有移位操作
>> right shift
<< left shift
这被认为是非常快的 我试图在R中应用相同的但似乎是错的。
R中是否有与此类似的快速操作?
提前谢谢。答案 0 :(得分:5)
您可以使用bitwShiftL
和bitwShiftR
:
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 ++编写你的程序。