【发布时间】:2013-11-18 00:42:51
【问题描述】:
我有一组 0 和 1,表示为最初使用 sample(c(0,1), n, replace=TRUE) 创建的列表,其中 n 是我的二进制数的长度。我目前正在使用 BCD 转换器将我的二进制数转换为十进制数,如下所示:
BCD.to.Decimal <- function(binaryNumb)
{
binaryLength = length(binaryNumb)
decimalNumb = 0
for(i in 1:binaryLength)
{
if ( binaryNumb[i] == 1)
decimalNumb = decimalNumb + 2^(binaryLength - i)
}
decimalNumb
}
我想改用 GrayCode.To.Decimal 转换器,它与我的 BCD.to.Decimal 转换器完成相同的工作,但改用格雷码。
注意:速度确实很重要,我想以最有效的方式来做这件事。我知道我的 BCD 转换器可能不是最有效的,它只是最简单的,如果您有更有效的方式来处理 BCD 转换,我也有兴趣了解这一点。
【问题讨论】:
-
关于让你的 BCD 更快:
function(x) sum(2L^(seq_along(x)-1L) * rev(x)) -
关于现有函数的重要一点:它将二进制转换为十进制,不是 BCD en.wikipedia.org/wiki/BCD_(6-bit)。还有一个基本函数
strtoi用于将二进制转换为十进制。 -
谢谢@Carl,我不知道它们之间的区别。很高兴知道我一直在交替使用 BCD 和“二进制转换”,这显然是错误的。我现在看到了区别。