作为我正在编写的算法的一部分,我需要找到一种方法将10位字转换为唯一的8位字。 10位字由5对组成,其中每对只能等于0,1或2(从不3)。例如:
|00|10|00|01|10|
这个值需要以某种方式合并为一个唯一的字节。
由于每对不能等于3,因此这个10位字永远不会代表各种各样的值,这使我认为可以创建一个算法来执行这种转换。最简单的方法是使用查找表,但是存储约680个值似乎浪费资源,这些值只能在我的程序中使用一次。我已经尝试过以某种方式将其中一对结合到其他对中,但我所做的每一次尝试都产生了一种非独特的价值,而且我现在很快就没有想法了!
任何帮助?
答案 0 :(得分:5)
您拥有的数字基本上是基数3.您只需要将其转换为基数2.
有5对,所以3 ^ 5 = 243个数字。 8位是2 ^ 8 = 256个数字,所以它是可能的。
在基数之间进行转换的最简单方法是首先转到10。
所以,举个例子:
00|10|00|01|10
Base 3: 02012
Base 10: 2*3^3 + 1*3^1 + 2*3^0
= 54 + 3 + 2
= 59
Base 2:
59 % 2 = 1
/2 29 % 2 = 1
/2 14 % 2 = 0
/2 7 % 2 = 1
/2 3 % 2 = 1
/2 1 % 2 = 1
So 111011 is your number in binary
This更详细地解释了上述过程。
请注意,一旦你将59
存储在一个1字节的整数中,你可能已经拥有了你想要的东西,因此可能没有必要明确转换为base 2.
答案 1 :(得分:1)
你基本上拥有的是一个基数为3的数字,并且你想将它转换为单个数字0 - 255,幸运的是,三元(基数3)中的5位数提供了243种组合。
您需要做的是:
Digit Action
( 1st x 3^4)
+ (2nd x 3^3)
+ (3rd x 3^2)
+ (4th x 3)
+ (5th)
这会给你一个0到242的数字。
答案 2 :(得分:0)
您正在考虑将某些信息存储在一个字节中。一个字节最多可包含2 ^ 8 = 256状态。
您的状态总共为3 ^ 5 = 243< 256.这使转移成为可能。
考虑你的对是ABCDE(每个字符可以是0,1或2)
您可以计算A * 3 ^ 4 + B * 3 ^ 3 + C * 3 ^ 2 + D * 3 + E作为结果。我保证结果将在0 - 255范围内。