让我先从一些背景知识开始:
通过"tribool"我理解一个可以包含以下值之一的变量:true,false或null.
问题是复制int的数组与指向 bool的指针,OP希望有一个尽可能小的tribools数组(或多或少).
使用"一点点"最基本的bit-fu,我提出了一个解决方案,每个tribool使用2位,并允许以16个字节存储OP的64个tribool数组,这是可以的.
我使用的tribool机制非常简单,如:
但后来我想......"比特"的算法定义是:
阿位是指定其中两个同样可能的事件应发生的信息量.
显然,真/假值是1位大.两个真假值整体上是2位大.
那么我们的概念摩擦呢呢?
我的观点是:就所包含信息的大小而言,tribool大于1位但小于2位.
(以上都不是正式的证据,但我相信我们可以同意关于tribool的"大小"严格大于1位且严格小于2.)
我的问题是:
如何以编程方式利用tribool信息少于2位的事实,并在软件(c,c ++?)中实现一个N tribool数组,其内存占用量小于N/4某些N的字节数?
是的,我确实理解这样的实现并不是真正的硬件友好,并且执行速度比任何具有冗余的常见解决方案都要慢(如OP的问题所示).让我们优化空间,而不是效率.
显然,这种实现需要一种摩博尔的不同表示而不是一对bool(这本身就是多余的,如前所述).该理论认为可以实现这一目标,我希望看到实际的实施.有任何想法吗?