Cデータ整列アルゴリズム


私たちはデータを処理するとき、8バイト、16バイトの位置合わせなど、データバイトの位置合わせを要求することがよくあります.一般的に考えられている方法は、次のとおりです.
unsigned int calc_align(unsigned int n,unsigned align)  
{  
    if ( n / align * align == n)            
        return n;  
    return  (n / align + 1) * align;  
} 

しかし、このアルゴリズムの効率は非常に低く、以下に効率的なデータ整列アルゴリズムを紹介する.
unsigned int calc_align(unsigned int n,unsigned align)  
{      
    return ((n + align - 1) & (~(align - 1)));  
}  

このアルゴリズムの原理は次のとおりです.
(align-1):2バイトが1、4バイトが11、8バイトが111、16バイトが1111...
(&~(align-1):アラインメントビットデータを0、そのビットを1にする
(n+(align-1)&~(align-1):整列後のデータ