代码之家  ›  专栏  ›  技术社区  ›  Dimebag

汉明码:奇偶校验位数

  •  2
  • Dimebag  · 技术社区  · 11 年前

    我正在尝试用java编写一个方法 任何 0或1位数,并在用汉明码编码后输出该行。

    当知道输入的位数(在本例中为16)时,我已经成功地编写了代码,因为知道了输入中的位数,我立即知道了最终输出中总共21位必须加上的奇偶校验位数(在这种情况下为5)。我使用的是int数组,所以我需要在开头声明一个大小,我的代码基于这些精确的大小工作。

    你们能想出任何方法/算法来给我输出的位数(在输入位数上加上相关的奇偶校验位数)吗?

    还是我必须用完全不同的方式来解决这个问题?有什么建议吗?提前谢谢!

    干杯

    2 回复  |  直到 11 年前
        1
  •  0
  •   user695022    11 年前

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

    假设您的输入完全由0和1组成

    int parityDigits = 32 - Integer.numberOfLeadingZeros(input.length());
    
        2
  •  0
  •   Teresa Carrigan    11 年前

    您的输入是字符串还是单个位?如果以字符串的形式输入,则可以将每个字符转换为一位,字符串的长度表示数组的长度。

    如果需要一次输入一位,请将其存储在ArrayList中。输入所有位后,您可以轻松地将列表转换为数组,或使用列表的大小等。