隐藏在C语言里面的奇技淫巧
隐藏在C语言里面的奇技淫巧
对齐到最近的8的倍数。
这个表达式 (size + 7) & ~(7) 是一个常见的位操作技巧,用于将 size 向上对齐到最近的8的倍数。
~(7):首先,7的二进制表示是0111。按位取反~操作会将所有的1变为0,所有的0变为1,所以~(7)就是1...1000。size + 7:这个操作是将size增加7。这确保了如果size不是8的倍数,那么通过加7,它至少会达到下一个8的倍数减1。&:这是按位与操作。当(size + 7)和1000(即~(7))进行按位与操作时,(size + 7)中低于8的所有位都会被清零,因为1000中这些位都是0。
综合以上步骤,这个操作的效果是将 size 向上对齐到最近的8的倍数。例如,如果 size 是10(二进制表示为 1010),那么 (size + 7) 就是17(二进制表示为 10001),然后和 1...1000 进行按位与操作后,结果就是16(二进制表示为 10000),这是大于10的最小的8的倍数。
总结:想要做字节对齐,可以直接return (size + boundary -1 )&~(boundary -1)
浙公网安备 33010602011771号