如何将比特流转换为base20号码?

问题描述 投票:0回答:1

给定是比特流(连续的比特串太长而不能一次处理),结果应该是base20数的匹配流。

对于少量位,该过程很简单:

假设最重要的是正确的:

110010011 = decimal 403 (1 * 1 + 1 * 2 + 1 * 16 + 1 * 128 + 1 * 256)
403 / 20 = 20 R 3
20 / 20 = 1 R 0
1 / 20 = 0 R 1
Result is [3, 0, 1] = 3 * 1 + 0 * 20 + 1 * 400

但是如果这些位太多而无法在一步中转换为十进制数呢?

我的方法是在循环中执行两个过程:将位转换为十进制并将小数转换为base20数。这个过程需要在遍历位时降低乘数(位置值),否则,它们很快就会增加太多而无法计算。第64位将乘以2 ^ 64,依此类推。

math bit bitstream
1个回答
2
投票

注意:我理解了比特流到达未知长度并且在未知持续时间内并且应该从基数2到基数20的实时转换的问题。


我不相信这可以一次性完成。问题是基座20和基座2没有共同点,模块化算法的规则不允许干净地解决问题。

(a+b) mod n = ( (a mod n) + (b mod n) ) mod n
(a*b) mod n = ( (a mod n) * (b mod n) ) mod n    
(a^m) mod n = ( (a mod n)^m ) mod n    

现在,如果你有一个用基数p和q(p <q)写成的数字A.

A = Sum[a[i] p^i, i=0->n] = Sum[b[i] q^i, i=0->n]

然后我们知道b[0] = A mod q。但是,我们不知道A,因此,上面告诉我们

b[0] = A mod q = Sum[a[i] p^i, i=0->n] mod q
               = Sum[ (a[i] p^i) mod q, i=0->n] mod q
               = Sum[ ( (a[i] mod q) (p^i mod q) ) mod q, i=0->n] mod q

这意味着:

如果你想知道基数q中数字的最低位数b0,你需要知道全数。

这只能在q = pm时简化

b[0] = A mod q = Sum[a[i] p^i, i=0->n] mod q
               = Sum[ (a[i] p^i) mod q, i=0->n] mod q
               = Sum[ a[i] p^i, i=0->m-1]

所以简而言之,因为q = 20和p = 2.我不得不说,不,它不能在一次通过中完成。此外,提醒自己我只谈了基数q的第一个数字而不是第i个数字。

例如,想象一下1000次0的位流,然后是单个1.这类似于数字21000.第一个数字很简单,但要得到任何其他数字......你基本上处于一个相当困难的地方。

© www.soinside.com 2019 - 2024. All rights reserved.