在 C 语言中,常量后缀可以表明该常数的类型,比如,后缀 ul 或 UL 表明是 unsigned long 类型。在内核代码中,很容易看到移位运算。在进行移位时,常量后缀会影响计算的结果,因此需要特别注意。下面这个例子就展示了同一个常量在跟不同后缀时,进行相同移位后得到的结果不同:
#include <stdio.h>
int main(void)
{
int bits = 34;
unsigned long a = 1 << bits;
unsigned long b = 1UL << bits;
printf("a=0x%0lx, b=0x%0lx\n", a, b);
return 0;
}
运行结果:
$ gcc -o main ./main.c
$ ./main
a=0x4, b=0x400000000