将指针的最低有效位设置为0

这个问题在这里已经有了答案:

  • 你如何设置,清除和切换一个位? 26个答案

  • 首先,您必须确保使用与指针大小相同的整数类型。 在大多数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

    上一篇: Setting least significant bit of a pointer to 0

    下一篇: Set a particular bits in a byte