2016-06-10 41 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++編寫程序。