将指针的最低有效位设置为0
这个问题在这里已经有了答案:
首先,您必须确保使用与指针大小相同的整数类型。 在大多数64位平台上, int
是32位的,指针是64位的,所以在转换为int
时会损坏指针。 除了一些奇特的内存模型外, size_t
通常可以完成这项工作。
然后,我建议使用一个联合,它允许修改一个指针的位而不需要任何强制转换:
union {
size_t *pointer;
size_t integer;
} u;
u.pointer = next_chunk;
u.integer &= ~1;
next_chunk = u.pointer;
正如其他人已经注意到的那样,可以通过在最小有效位的情况下通过与按位取反的位模式进行AND来清除整数位。
将从位位置1开始的最低有效位设置为值0的工作方式如下。
n &= ~((0x01) << 1)
我认为相关代码段中的代码没有正确使用。
尝试以下操作
n &= ~0 << 1;
另一种方式是
n = ( ( unsigned int )n >> 1 ) << 1;
考虑到将指针转换为int类型的对象是不安全的。
如果你的意思是设置指针指向的对象的最低有效位,那么操作看起来就像
*next_chunk &= ~0 << 1
*next_chunk = ( *next_chunk >> 1 ) << 1;
链接地址: http://www.djcxy.com/p/28799.html