0%

C语言 按位运算符

C语言的按位运算符

​ 按位运算符,在实际的程序中用的不是很多,主要的应用是底层系统操作,比如嵌入式、驱动等,它的作用就是对位进行操作,这个就要比较熟悉各种进制的转换了。

​ 几个按位运算符的含义如下:

按位运算符 含义
& 按位与
| 按位或
^ 按位异或
~ 按位取反
<< 按位左移
>> 按位右移

举个例子来show一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*advance/operator/operator1.c*/
#include <stdio.h>

int main()
{
int a = 5; //0b101
int b = 3; //0b011

printf("%d & %d : %d\n", a, b, (a & b));
printf("%d | %d : %d\n", a, b, (a | b));
printf("%d ^ %d : %d\n", a, b, (a ^ b));
printf("~%d : %d\n", a, ~a);
printf("%d<<1 : %d\n", a, a << 1);
printf("%d>>1 : %d\n", b, b >> 1);

return 0;
}

相应地Makefile如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
#advance/operator/Makefile

ALL : operator1

operator1: operator1.c
gcc -o operator1 operator1.c

.PHONY : clean

clean:
rm -f operator1

我们可以看到,这一次的Makefile我们多了一个.PHONY行,这是一个伪目标,主要作用是防止Makefile定义的可执行命令的目标跟工作目录里面的文件重名而出现无法运行的问题,在这也提高了执行时的效率,建议每个Makefile都要包含。

输入make,然后./operator1输出为:

1
2
3
4
5
6
5 & 3 : 1
5 | 3 : 7
5 ^ 3 : 6
~5 : -6
5<<1 : 10
3>>1 : 1

可以看到结果就是对每一位进行的操作

处无为之事,行不言之教;作而弗始,生而弗有,为而弗恃,功成不居!

欢迎关注我的其它发布渠道