1 #include <stdio.h>
2
3 #define SHR(bits,word) ((word) >> (bits))
4 #define ROTL(bits,word) (((word) << (bits)) | ((word) >> (32-(bits))))
5 #define ROTR(bits,word) (((word) >> (bits)) | ((word) << (32-(bits))))
6
7 int main()
8 {
9 unsigned long ulData = 0x00001000;
10 printf("%x/n", ulData);
11 printf("%x/n", SHR(3, ulData));
12 printf("%x/n", ulData);
13 printf("%x/n", ROTL(3, ulData));
14 printf("%x/n", ulData);
15 printf("%x/n", ulData >> 31); // 注意:此处右移32位,编译器会报错,因为超出了该类型的bit数范围
16 printf("%x/n", ulData);
17 }
~/testbench> gcc -o bitop bitop.c
~/testbench> ./bitop
1000
200
1000
8000
1000
0
1000
2
3 #define SHR(bits,word) ((word) >> (bits))
4 #define ROTL(bits,word) (((word) << (bits)) | ((word) >> (32-(bits))))
5 #define ROTR(bits,word) (((word) >> (bits)) | ((word) << (32-(bits))))
6
7 int main()
8 {
9 unsigned long ulData = 0x00001000;
10 printf("%x/n", ulData);
11 printf("%x/n", SHR(3, ulData));
12 printf("%x/n", ulData);
13 printf("%x/n", ROTL(3, ulData));
14 printf("%x/n", ulData);
15 printf("%x/n", ulData >> 31); // 注意:此处右移32位,编译器会报错,因为超出了该类型的bit数范围
16 printf("%x/n", ulData);
17 }
~/testbench> gcc -o bitop bitop.c
~/testbench> ./bitop
1000
200
1000
8000
1000
0
1000