2014-02-08 111 views
2

我正在尝试在java中编写一个方法,该方法将输入任何数字的0或1位数并在用汉明码编码后输出该行。汉明码:奇偶校验位数

当知道输入数字的位数(在本例中为16)时,我已经设法编写代码,因为知道输入中的位数,我立即知道必须添加奇偶位的数量(在这种情况下为5)在最终输出中总共为21位数字。我正在处理int数组,所以我需要在开头声明大小,并且我的代码基于这些确切的大小工作。

你们可以想到的任何方式/算法,可以给我的输出将具有位数仅在输入数字的数量根据(加入相关的奇偶校验位来输入数字的数量之后)?

还是我在一个完全不同的方式来解决这个问题?有什么建议么?先谢谢你!

干杯!

+1

这个伟大的问题似乎是题外话;最好在http://math.stackexchange.com/上提问并回答。 –

+0

确实,这似乎是比实际编程更多的数学问题。 – Dimebag

回答

0

根据我的理解,您可以在32位输入中获得第6个奇偶校验位,在第64个位中获得第7个奇偶校验位,等,所以你需要的是floor(lg(n)) + 1,这在Java中,你可以通过使用32 - Integer.numberOfLeadingZeros(n)得到。

假设你输入完全由0和1的,你会做

int parityDigits = 32 - Integer.numberOfLeadingZeros(input.length()); 
+0

这很好用!但只有当输入高于4位数和2的幂。我想这是尽可能好,尤其是因为术语* any *没有在我的任务中定义。谢谢! – Dimebag

0

是您输入一个字符串或位?如果以字符串形式输入,则可以将每个字符转换为一个位,并且该字符串的长度将给出该数组的长度。

如果您需要输入一个位的时间,将其存储在一个ArrayList。当输入完所有位后,可以很容易地将列表转换为数组,或者使用列表的大小等。

+0

获取输入中的位数不是问题。我的问题是:我怎么能写这样的,我的方法会知道/计算自身的位有多少平价增加的基础上,在输入的数字是多少? – Dimebag