使用较少位的无符号QWORD(64位)的值范围
Value range of unsigned qword (64-Bits) using less bits?
我正在寻找一种表示值范围的方法:0-18446744073709551615使用少于8个字节。
我试图考虑一些可以做到的方法,但没有任何效果。从理论上讲,例如:使用单个字节表示至少2个字节的位序列。但是,2个字节具有65536个不同的位组合,而单个字节仅使我们的值范围为0-255(256组合)。
最好的方法可能是改变位的含义。那很好,但不能有任何精确损失。
我开始认为这根本不可能,尽管我想获得其他关于这个主题的观点和理论。
有2个规则:#1不能有任何精确损失(即所有数字0-184444444073709551615必须代表)。#2从标准64位形式转换不应导致需要超过7个字节(56位)。
这些规则使这一点变得特别困难。
这些规则使这一点变得特别困难。
是的,难以证明是不可能的。
对于每个可能的64B值,您可以无损地压缩8个字节到的8个字节,您可以继续重复该过程,直到您的1TB文件约为7个字节。
。还有很多其他信息理论论证为什么这是不可能的。例如PIGONHOLE原理:n
位只有2^n独特的位模式,因此少于64位的任何东西都无法对每个可能的64位值都有唯一的表示。
您可以使用的是Huffman编码或类似的方法:如果某些64B值比其他值更常见,则不太复杂的可变长度编码方案可以节省总字节。,但对于所有64B值都可以用可变的长度编码方案表示,对某些值的编码将占8字节以上。
存在更高级的熵编码方法,并在现代视频编解码器中使用。(例如X264的CABAC)。
有关更多理论,Wikipedia的无损压缩文章有一个局限性部分。
另请参见:
cs Theory.se:什么是无损压缩数据的极限?(如果存在这样的限制)
kolmogorov复杂性
- 将应用程序从32位移植到64位时出现问题
- 64位机器上的C++内存对齐
- qmake:检测目标位宽(32 位或 64 位)
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- Qt 5.11.2 (Clang 8.0 (Apple), 64 位), 找不到 QJSEngine 文件
- 在 64 位边界上对齐C++结构数组?
- 如何为字符串生成唯一但一致的 N 位哈希(小于 64 位)?
- 在 64 位的 c++ 中运行 mstest 测试
- 在两个线程上读/写 64 位,无互斥/锁定/原子
- 浮点数为 32 位和 64 位二进制表示形式
- 是否有 64 位等效于 GetLastInputInfo / LASTINPUTINFO?
- 所有可能的链接生成器与64位密钥
- WinAPI C++如何从 64 位应用程序加载资源
- 在 c++ 中输出 64 位整数
- 使用192/256位整数求和无符号64位整数向量的点积的最快方法
- 如何在 64 位平台上计算 32 位哈希C++?
- 使用较少位的无符号QWORD(64位)的值范围
- 32位或64位操作系统如何影响数据类型范围
- 64 位系统上的指针值范围
- 32位,64位和80位浮点IEEE-754的可表示值范围