例如,我需要存储1,000,000(或多个数量级)二进制数。我的不到50 MB。布尔类型数组如何占用空格?
我首先尝试使用整数数组来实现,但它需要大量内存,这在例如大多数情况下是不可接受的。嵌入式设备。
我是否还可以使用二进制形式的整数来表示8个二进制数字,这可以减少整数的数量(虽然只减少了8倍)?
答案 0 :(得分:2)
如果您的数字受MAX限制,您可以使用Ceil(MAX / 8)字节在每个字节中存储8个布尔值
Set Nth bit in array:
ByteArr[N div 8] = ByteArr[N div 8] OR (1 << (N mod 8))
Clear Nth bit in array:
ByteArr[N div 8] = ByteArr[N div 8] AND !(1 << (N mod 8))
Get Nth bit:
BoolResult = 0 <> (ByteArr[N div 8] AND (1 << (N mod 8)))
答案 1 :(得分:1)
您可以尝试使用compressed bitwise trie