首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用R,如何对有符号(负)整数进行位移位?

使用R,如何对有符号(负)整数进行位移位?
EN

Stack Overflow用户
提问于 2020-11-15 05:55:19
回答 2查看 145关注 0票数 1

在c-语法中,我们可以移位有符号整数(负数):如果我们想强制和无符号整数移位,我们可以使用">>>“。

代码语言:javascript
复制
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显示了相同的页面。它声明:“移位是假设值代表无符号整数。”

代码语言:javascript
复制
y = -1732584194
bitwShiftR(y,16)  
# [1] 39098     ## wanted -26438


x = 1732584193
bitwShiftR(x,16)
# [1] 26437    ## works as expected

演示如何使用R统计编程语言执行带符号的移位?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-15 08:56:30

您可以定义自己的函数来执行此操作:

代码语言:javascript
复制
Rshift <- function(val, nbits) floor(val/2^nbits)

这就给出了:

代码语言:javascript
复制
y = -1732584194
Rshift(y, 16)
#> [1] -26438

y = 1732584194
Rshift(y, 16)
#> [1] 26437

或者,如果您习惯于用C编写代码,请用C编写一个函数,并使用Rcpp将其编译为R函数:

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2020-11-15 08:56:23

反之:

代码语言:javascript
复制
> y = -1732584194
> -bitwShiftR(-y,16) - 1
[1] -26438
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64839024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档