gpt4 book ai didi

c - C 指针上的位移位?

转载 作者:太空狗 更新时间:2023-10-29 16:50:57 26 4
gpt4 key购买 nike

我正在这个 C 项目中,我希望它能提高内存效率。在某些情况下,我使用我编写的动态数组结构的 void * 来保存位。我希望使用全部 64(在本例中)位。

我很快意识到您实际上不能对指针进行任何位操作。所以我的解决方案如下:

void *p;
((unsigned long)p) << 4;
((unsigned long)p) & 3;

这样就完成了工作,但这只是因为在我的计算机上,long 和指针的大小相等。所有(或大多数)架构都会出现这种情况吗?

我真正的问题是:是否有更正确的方法来对指针进行位操作?我原以为这种方法在 C 语言中比较常见(将位打包到 void * 中),但是我可能错了...

最佳答案

如果你的编译器支持,C99 的 <stdint.h> header 提供 intptr_tuintptr_t类型应该足够大以在您的系统上保存一个指针,但它们是整数,因此您可以进行位操作。如果您需要的话,没有比这更便携的了。

关于c - C 指针上的位移位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1845203/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com