0

我编写了一个使用霍夫曼编码的简单文本文件压缩器。我对文本进行编码并将 Huffman 生成的二进制文件写入文件。为了解码,我读入二进制文件并逐步遍历霍夫曼树。

那部分很简单。问题出现在 0 和负数上。为了练习/娱乐/学习,我决定做自己的二进制转换方法(从 Java 字节到字符串,反之亦然),我决定通过将最后一位翻转为 1 来表示负数。

例如,-2 = 00000101;; 2 = 00000100(额外的 0 用于填充,因为即使是不必要的 0 在 Huffman 中也很重要……不过这无关紧要)

然而,0 = 00000000 = 00000001

这似乎不是问题,但是这两个二进制字符串映射到霍夫曼树中的两个不同字符。

有没有更好的方法来处理二进制中的负数来解决这个问题?

4

1 回答 1

0

我不确定这会对您有所帮助,但我会尝试:

首先,有不同种类的二进制,纯的或其他的。二进制纯不允许负数,它从 0 开始......

您可以使用幅度和符号,另一种二进制,它允许负数,并且 - 或 + 符号用数字中最重要的位表示,例如: 4 位的数字:

0100=2

1100=-2

(1 位为符号,最重要的,左第一个,其他 3 位为数字)

您也可以使用二进制补码,但它更难,您需要以二进制形式获取数字,然后将其转换为另一种类型。

我希望我能帮助你,对于英语的很多错误,我深表歉意!

于 2013-04-15T03:20:04.007 回答