&~ 是什么意思?

Jon*_*min -1 c++ bit-manipulation bitwise-operators

这是什么& ~(minOffsetAlignment - 1)意思?

这是否意味着析构函数的地址?

这是我从中得到的代码片段。

VkDeviceSize 是 uint64_t。

VkDeviceSize getAlignment(VkDeviceSize instanceSize, VkDeviceSize minOffsetAlignment) 
{
    if (minOffsetAlignment > 0) 
    {
        return (instanceSize + minOffsetAlignment - 1) & ~(minOffsetAlignment - 1);
    }
    return instanceSize;
}
Run Code Online (Sandbox Code Playgroud)

小智 5

将某个数字与某个边界对齐是一个常见的技巧。它假设 minOffsetAlignment 是 2 的幂。

如果 minOffsetAlignment 是 2 的幂,则其二进制形式将为 1 后跟 0。例如,如果是 8,则二进制将是b00001000.

如果减一,它将成为一个掩码,其中所有可以更改的位都将被标记为 1。对于同一个例子,它将是b00000111(从 0 到 7 的所有数字)。

如果你取这个数字的补码,它就成为一个用于清除的掩码。在示例中,b11111000 .

如果针对此掩码对任何数字执行 AND (&) 操作,则会将与对齐下方的数字相关的所有位清零。

例如,假设我有数字 9 b00001001。执行 9&7 是b00001001& ,b11111000其结果是b00001000or 8。

结果值是针对给定金额对齐的计算值。