【问题标题】:Reducing the number of bits by 1 [closed]将位数减少 1 [关闭]
【发布时间】:2017-06-08 13:31:41
【问题描述】:

有没有一种通用的方法来表示包含n 位的数字使用n-1 位;例如显示 1001 有 4 位使用 XXX where X = {0|1} 有 3 位。此外,映射应该能够在没有任何冲突的情况下检索原始二进制文件。

这个page 是迄今为止我发现的最相关的参考资料,它试图计算位数,但不减少位数。

编辑:我知道这听起来不可能,但我很好奇是否存在解决方法!

【问题讨论】:

  • 所以你想把一个n位数据压缩成n-1?凉爽的。然后将n-1 压缩成n-2 并压缩为零。完美压缩。你肯定会获得诺贝尔奖。
  • 你怎么可能做到这一点?
  • 4 位编码 16 个可能的值。 3 位编码 8 个可能的值。所以答案是否定的。
  • 没有。您所涉及的内容称为压缩。没有通用的、完美的压缩。假设我们想要将每个 4 位字符串压缩到 3 位或更少位。有 2^4 = 16 个不同的 4 位字符串,但只有 2 个 1 位字符串、4 个 2 位字符串和 8 个 3 位字符串,总共有 14 个可能的值。您有 16 个值要存储到 14 个插槽中。其中两个不能压缩。
  • 在某些特殊情况下可以省略位,因为它是根据其他原则假设的。例如。归一化浮点数尾数的高位始终为 1,因此不需要包含在表示中。

标签: c algorithm bit-manipulation bit


【解决方案1】:

如果你设法在 16 个数字之间建立一对一的映射,你会非常聪明

0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111

还有八个数字

000,001,010,011,100,101,110,111.

【讨论】:

  • 我想您可以将示例简化为 n=2 以使其更加清晰 :) 或 n=1 ...
【解决方案2】:

n 位有 2^n 个可能值,(n-1) 位有 2^(n-1) 个可能值。所以你不能从前者无损地转换为后者。

如果可能的话,您还可以使用 n-2 位等递归地表示您的 n-1 位。一切都可以用 0 位表示:)

您被链接的页面误导了,这说明x &= x-1 删除了位字符串中的1

  10100
& 10011
= 10000

【讨论】:

  • 我明白你的意思了!我在发布问题时从一开始就知道这件事。我正在考虑按照这种方法来看看我们是否可以减少位数!无论如何,感谢您的澄清。
猜你喜欢
  • 2013-03-23
  • 2021-07-06
  • 1970-01-01
  • 1970-01-01
  • 2016-06-30
  • 2020-12-07
  • 1970-01-01
  • 1970-01-01
  • 2021-03-19
相关资源
最近更新 更多