C 将位数减少1

C 将位数减少1,c,algorithm,bit-manipulation,bit,C,Algorithm,Bit Manipulation,Bit,使用n-1位表示包含n位的数字是否有一种通用方法;e、 g.显示具有4位的1001,其中X={0 | 1}具有3位。此外,映射应该能够在没有任何冲突的情况下检索回原始二进制文件 这是迄今为止我发现的最相关的参考,它试图计算位数,但不减少位数 编辑:我知道这听起来是不可能的,但我很好奇是否存在这样做的解决办法 有2^n个可能值和n位,2^(n-1)个可能值和(n-1)位。所以你不能毫无损失地从前者转换到后者 如果可能的话,还可以使用n-2位等递归地表示n-1位。所有内容都可以用0位表示:) 您被链

使用
n-1
位表示包含
n
位的数字是否有一种通用方法;e、 g.显示具有4位的
1001
,其中X={0 | 1}具有3位。此外,映射应该能够在没有任何冲突的情况下检索回原始二进制文件

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


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

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

如果可能的话,还可以使用n-2位等递归地表示n-1位。所有内容都可以用0位表示:)

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

  10100
& 10011
= 10000

如果你能在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位数据压缩到
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,因此它不需要包含在表示中。我在这里看到了你的观点!我在发帖时就知道这件事。我正在考虑采用这种方法,看看是否可以减少位的数量!无论如何,感谢您的澄清。我想您可以将示例简化为
n=2
,使其更加清晰:)或
n=1
。。。