隐藏在C语言里面的奇技淫巧

隐藏在C语言里面的奇技淫巧

对齐到最近的8的倍数。

这个表达式 (size + 7) & ~(7) 是一个常见的位操作技巧,用于将 size 向上对齐到最近的8的倍数。

  1. ~(7):首先,7 的二进制表示是 0111。按位取反 ~ 操作会将所有的1变为0,所有的0变为1,所以 ~(7) 就是 1...1000
  2. size + 7:这个操作是将 size 增加7。这确保了如果 size 不是8的倍数,那么通过加7,它至少会达到下一个8的倍数减1。
  3. &:这是按位与操作。当 (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)


posted on 2023-12-13 16:46  开源侠  阅读(39)  评论(0)    收藏  举报