【发布时间】:2011-10-05 13:50:42
【问题描述】:
我正试图从我的记忆中挤出尽可能多的内容。
我有一个 4.9999995e13 整数矩阵,但它们只需要是真或假 - 基本上我只需要为这些整数中的每一个提供一点存储空间。
我知道 C 中没有单个位类型(也许有人可以向我解释原因),而且我也知道如果存在 short short int,它将是 1 个字节,与 char 相同。然而,C 中的所有逻辑运算都返回整数(以及一些其他函数)。
所以我的问题是:
- 有没有办法让
short short int存在? - 如果我改用
char,我是否会因为必须完成所有转换为int而导致性能下降? - 还有其他我想念的方法吗?
以防万一,我正在为 C99 使用 GCC 进行编译。
编辑我刚刚在this wikipedia page 上看到有一个_Bool 类型,这实际上是标准的吗?
【问题讨论】:
-
您能否解释一下为什么它们都必须转换为
int? -
您可以使用位域 (codepad.org/HMz2f7OR)。使用
char作为 C 中的位域底层类型是实现定义的(这就是为什么我没有将它作为答案发布,因为我现在不想为 unsigned int 创建 32 位域),但适用于 GCC。 -
好吧,我不确定他们是否这样做,我认为按位 ORing 两个字符需要强制转换,因为它将返回一个 int,根据:en.wikipedia.org/wiki/Boolean_data_type#History
-
这些位分别代表什么?例如,您打算如何访问 bit[4264334543] 的值,您将如何处理它?我问是因为可能有一种更有效的数据存储方式,这取决于您尚未透露的结构。
-
@AShelly 它们表示图中两个节点之间的边。我需要快速查找的值来查看是否存在边缘。