-4
在C++中有轉移operartionR中是否有移位操作?
>> right shift
<< left shift
這是考慮到是非常快的。
我試圖在R中應用它,但它似乎是錯誤的。
在R中是否存在與此類似的操作?
在此先感謝。
在C++中有轉移operartionR中是否有移位操作?
>> right shift
<< left shift
這是考慮到是非常快的。
我試圖在R中應用它,但它似乎是錯誤的。
在R中是否存在與此類似的操作?
在此先感謝。
您可以使用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++編寫程序。
谷歌搜索「R移動運算符」會在第一次點擊時顯示答案。發佈問題之前,您是否嘗試找到答案? –
更有建設性的評論:'''真的很有幫助。如果你輸入'?? 「轉移」或「?在R控制檯中「按位」,你很快就可以爲R的按位運算符(包括移位運算符)提供幫助頁面。 –