r - 屏蔽 R 中的最高设置位?

标签 r bit-manipulation

我正在 R 中工作。我需要找到一个快速函数来屏蔽整数的最高设置位。例如:

# 6 binary is 110, this should turn into 010 which is 2
function_mask(6) = 2

# 8 in binary is 1000, this should turn into 0000
function_mask(8) = 0

这相当于减去最接近的较低的二的幂。如果我能找到一个快速函数来简单地找到最接近的较低的两个幂,我会很高兴。例如:

# 6 in binary is 110, the MSB is 100
function_power_two(6) = 4
function_mask(6) = 6 - function_power_two(6) = 2

# 8 in binary is 1000, the MSB is 1000 which is 8 in base 10
function_power_two(8) = 8
function_mask(8) = 8 - function_power_two(8) = 0

我在 R 中发现了按位运算:例如 bitwShiftL 和 bitwShiftR。但是,我不知道如何在 R 中实现解决方案。

我见过其他语言的解决方案:Java , C ,和 C++ 。但是,我不知道如何在 R 中实现这些解决方案。

C++ 中有使用 Rcpp 的解决方案,但 Rcpp 不支持大于 32 位的整数。我需要比这更大的整数。

最佳答案

此函数比 the answer I posted earlier 更快 (4 倍) .

pow2 <- c(0,1,2,4,8,16,32,64,128,256,512,1024)
function_mask <- function(x) x - pow2[findInterval(x, pow2)]

您可以根据需要制作 pow2 向量,以应对更大的整数

关于r - 屏蔽 R 中的最高设置位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38879212/

相关文章:

R 移位() 和 diff()

regex - R中的正则表达式删除最后一个空格之后的字符串部分

R 函数 : Print Warning Only on First Call of Function

从 double 转换为 float

c++ - 带位的长枚举

r - 从 3 个不同大小的输入矩阵构建所有可能的 3 列矩阵

r - 在 R 替代中使用变量

c# - 在 C# 中是否有对字节数组进行循环位移的函数?

c++ - 我想根据任意掩码打包这些位

ios - 在 Objective C UIFontDescriptor.h 常量中使用枚举、uint32_t 和位移位