字节对齐

#define ROUNDUP(x,n) ((x+n-1)&(~(n-1)))

今天看C PUZZLE的时候看到这段代码,想了半天终于明白了。是想让x关于n字节对齐。其中n应该是2的次方才有意义。所谓的x关于n字节对齐的意思是an < x < (a+1)q,让x = (a+1)q。(对于C PUZZLE,可以点击http://www.gowrikumar.com/c/)

一步步分析:

(x+n-1)

它的含义是使x由(qn<x<(q+1)n 变为 (q+1)n<x<(q+2)n),假设是A

下一步:

(~(n-1))

它的含义是得到n的倍数,到底是多少倍不重要,重要的是你要知道得到的n的倍数的一个值,假设是B

然后两个值做与操作,这就相当于B给A来“修边幅”,还是举例子。

例如x = 37 , n = 16,那么A = 42,二进制为0010 1010,B的值是240(假设是8位),二进制是1111 0000

我们的目的是让x字节对齐,也就是成为16的倍数,要想成为16的倍数,只要你后四位为0就行,其余的位不管。所以A&B得到我们的结果。

哪次把PUZZLE的答案写篇博客~

你可能感兴趣的:(字节对齐)