linux内核中有很多巧妙的设计、算法,在面试、实际应用中都大有裨益。
1、向上取整除
#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
例:DIV_ROUND_UP(12, 5) 结果是3
2、求最大公约数
lib/gcd.c
首先将ab排序,结果a>= b;如果b=0,0除任何数为0,所以a为最大公约数,返回a;
假设c是最大公约数 c ; a除以b商k余r;a=mc,b=nc; 则 r = a- kb = (mc) - (knc) = (m-kn)c,所以 r也可以被c整除,因此gcb(a,b) = gcb(b,r)