在c-语法中,我们可以移位有符号整数(负数):如果我们想强制和无符号整数移位,我们可以使用">>>“。
y = -1732584194
(y>>16)
-26438
x = 1732584193
(x>>16)
26437使用R时,有按位运算符https://stat.ethz.ch/R-manual/R-devel/library/base/html/bitwise.html
例如,?bitwShiftL显示了相同的页面。它声明:“移位是假设值代表无符号整数。”
y = -1732584194
bitwShiftR(y,16)
# [1] 39098 ## wanted -26438
x = 1732584193
bitwShiftR(x,16)
# [1] 26437 ## works as expected演示如何使用R统计编程语言执行带符号的移位?
发布于 2020-11-15 08:56:30
您可以定义自己的函数来执行此操作:
Rshift <- function(val, nbits) floor(val/2^nbits)这就给出了:
y = -1732584194
Rshift(y, 16)
#> [1] -26438
y = 1732584194
Rshift(y, 16)
#> [1] 26437或者,如果您习惯于用C编写代码,请用C编写一个函数,并使用Rcpp将其编译为R函数:
Rcpp::cppFunction("long long RShift(long long a, int b) { return a >> b;}")
y = -1732584194
RShift(y, 16)
#> [1] -26438
y = 1732584194
RShift(y, 16)
#> [1] 26437发布于 2020-11-15 08:56:23
反之:
> y = -1732584194
> -bitwShiftR(-y,16) - 1
[1] -26438https://stackoverflow.com/questions/64839024
复制相似问题