Appearance
寄存器操作
位运算
C
1 #include <stdio.h>
2
3 int main(void)
4 {
5 int i = 0xff;
6 printf("%x\n", 0xff&0x0);
7 printf("%x\n", 0xf0&0x0f);
8 printf("%x\n", ~0xff);
9 printf("%x\n", 0x1<<3);
10 printf("%x\n", 0x1000>>4);
11
12 printf("%x\n", 0 ^ 0);
13 printf("%x\n", 0 ^ 1);
14 printf("%x\n", 1 ^ 0);
15 printf("%x\n", 1 ^ 1);
16 return 0;
17 }
result:
0
0
ffffff00
8
100
0
1
1
0
实现高低位互换
C
1 #include <stdio.h>
2
3 int main(void)
4 {
5 printf("%X\n", 0xAABB);
6 printf("%X\n", 0xAABB>>8|0xAABB<<8&0xff00);
7 return 0;
8
9 }
result:
AABB
BBAA
判断是不是2的整数幂
C
1 #include <stdio.h>
2
3 int main(void)
4 {
5 int m = 4;
6 if((m & ( m-1 )) == 0)
7 printf("%d is power of 2\n", m);
8 else
9 printf("%d isn't power of 2\n", m);
10 return 0;
11 }
数字交换
C
1 #include <stdio.h>
2
3 void swap(int *a, int *b)
4 {
5 *a = *a ^ *b;
6 *b = *a ^ *b;
7 *a = *a ^ *b;
8 }
9 int main(void)
10 {
11 int a = 0x55;
12 int b = 0x66;
13 printf(" a:%X\n b:%X\n", a, b);
14 a = a ^ b;
15 b = a ^ b;
16 a = a ^ b;
17
18 printf(" a:%X\n b:%X\n", a, b);
19 swap(&a, &b);
20 printf(" a:%X\n b:%X\n", a, b);
21 return 0;
22 }
操作寄存器
0xffff0000 | 0x0f
0xffffffff & 0xffffff0f
0xffffffff & ~(0x000000f0)
可以直接宏定义
C
#define BIT_0 0x1
#define BIT_1 0x01<<1
...
位域
限定几个位长度的数据类型
- 和结构体一块使用
C
1 #include <stdio.h>
2 #include <string.h>
3
4 struct register_usb
5 {
6 unsigned short en :1;//设置一个位
7 unsigned short ep :4;//设置四个位
8 unsigned short mode :3;//设置三个位
9 };
10
11 int main(void)
12 {
13 struct register_usb reg;
14 memset(®, 0 , sizeof(reg));
15 reg.en = 1;
16 reg.ep = 4;
17 reg.mode = 3;
18 printf("szieof = %d\n", sizeof(reg));
19 printf("reg:%x\n", reg);
20 printf("reg.en:%x\n", reg.en);
21 printf("reg.ep:%x\n", reg.ep);
22 printf("reg.mode:%x\n", reg.mode);
23 return 0;
24
25 }
- 和联合体一块使用
C
1 #include <stdio.h>
2 #include <string.h>
3
4 union spsr
5 {
6 unsigned short mode :3;
7 unsigned short ep :4;
8 unsigned short en :1;
9 };
10
11 int main(void)
12 {
13 union spsr reg2;
14 memset(®2, 0, sizeof(reg2));
15 reg2.mode = 3;
16 printf("reg2:%x\n", reg2);
17 return 0;
18
19 }
对于没有使用的位可以使用匿名
C
4 struct spsr
5 {
6 unsigned short mode :3;
7 unsigned short :4;//不设置变量名
8 unsigned short en :1;
9 };