gpt4 book ai didi

r - 从整数到位再返回

转载 作者:行者123 更新时间:2023-12-04 09:40:56 25 4
gpt4 key购买 nike

我正在尝试将整数值转换为其位表达式,并将其部分转换为整数 (as per this blogpost, for context) .

将整数转换为位似乎确实有效,但是在将值转换回初始整数时我遗漏了一些东西。

'intToBase2' <- function(x){
x %>%
intToBits() %>%
rev %>%
as.character() %>%
{sapply(strsplit(., "", fixed = TRUE), '[', 2)} %>%
paste0(.,collapse = '')
}
val <- 1855928457
intToBase2(val) # does seem to return the correct bit expression, as expected

但是,如果我尝试颠倒相同的逻辑,则会在某处丢失某些内容:
val %>%
intToBase2 %>% # Get expression in bits
{strsplit(.,'')[[1]]} %>% # split
sprintf('0%s',.) %>% # add leading zeros
rev %>% # reverse order
as.raw %>% # expression to raw
readBin(.,what='integer')

R> [1] 16777217

我错过了什么?我认为我所做的某些步骤是不正确的。

最佳答案

这个函数反转你的,并被向量化:

base2ToInt <- function(string)
{
sapply(strsplit(string, ""), function(x) sum(rev(+(x == "1")) * 2^(seq(x)-1)))
}

所以你可以做
base2ToInt(c("1", "0", "10", "11111111"))
#> [1] 1 0 2 255


base2ToInt(intToBase2(val))
#> [1] 1855928457
> base2ToInt(intToBase2(val)) == val
#> [1] TRUE

它的工作原理是将字符串拆分为字符,因此每个字符串都成为“1”和“0”的向量。这些被转换为数值,然后反转,然后乘以相同长度的 2 的幂序列。将其相加以给出每个字符串的答案。

这有点“代码高尔夫”,但位操作通常是......

关于r - 从整数到位再返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62333478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com