我正在这个 C 项目中,我希望它能提高内存效率。在某些情况下,我使用我编写的动态数组结构的 void * 来保存位。我希望使用全部 64(在本例中)位。
我很快意识到您实际上不能对指针进行任何位操作。所以我的解决方案如下:
void *p;
((unsigned long)p) << 4;
((unsigned long)p) & 3;
这样就完成了工作,但这只是因为在我的计算机上,long 和指针的大小相等。所有(或大多数)架构都会出现这种情况吗?
我真正的问题是:是否有更正确的方法来对指针进行位操作?我原以为这种方法在 C 语言中比较常见(将位打包到 void * 中),但是我可能错了...
最佳答案
如果你的编译器支持,C99 的 <stdint.h>
header 提供 intptr_t
和 uintptr_t
类型应该足够大以在您的系统上保存一个指针,但它们是整数,因此您可以进行位操作。如果您需要的话,没有比这更便携的了。
关于c - C 指针上的位移位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1845203/