C语言学习笔记01---位运算符

发布于:2022-12-13 ⋅ 阅读:(331) ⋅ 点赞:(0)

位运算符主要是以二进制规则进行运算

位运算符有七个,分为两类:

逻辑位运算符:位与(&)、位或(|)、位异或(^)、非位(~)

移位运算符:左移(<<)、右移(>>)、无符号右移(>>>)

位逻辑运算符

1.按位与

一个&时,参加运算的两个数据,按二进制位进行“与”运算。运算规则:同1为1,其余为0。
两个&时,表示逻辑与的意思,即为and。当运算符两边的表达式的结果都为真时,整个运算结果才为1,只要有一方为假,则结果为0。

用途1:将某一位置为0,其它位不变

举例:将char 型变量a的最低位置0:

a = a & 0376
其中:0376:11111110

用途2:取指定位

举例:取出a的低字节,置于c中

c = a & 0377
其中:0376:11111111

2.按位或

一个 | 时,参加运算的两个对象,按二进制位进行“或”运算。运算规则:同0为0,有1为1。另外,负数按补码形式参加按位或运算。
两个 | 时,是“逻辑或”,当两个条件中有任一个条件满足,“逻辑或”的运算结果就为“真”即1。

用途:将某些位置为1,其它位不变

举例:将int型 变量a 的低字节置为1:

a = a | 0xff
其中:
0xff:11111111

3.按位异或

参与运算的两个数据,按二进制位进行“异或”运算。运算规则:相同为0,不同为1。

用途:使特定位翻转(与0异或保持原值,与1异或取反)

举例:使01111010 低四位翻转:

01111010 ^ 00001111 = 01110101

3.按位取反

按位取反操作会翻转其每一位。运算规则:0变为1,1变为0。

位移运算符

1.左移(<<):

符号左边是要进行左移运算的数,右边表示要移动的位数。运算规则:高位丢弃,低位补0。

通常:数a 左移n 位,即:a* 2^n

示例讲解

在这里插入图片描述

【注意】:左移后,最左侧一位为1时,代表是负数,(最左侧一位为符号位)

在这里插入图片描述

2.右移(>>):

符号左边是要进行右移运算的数,右边表示要移动的位数。运算规则:正数左补0,负数左补1。

通常:数a 右移n 位,即:a/2^n

示例讲解

在这里插入图片描述

示例讲解,正数奇数a右移n位,(a-1)/2^n; 正数偶数a 右移n位,a/2^n

在这里插入图片描述

示例讲解:负数右移,最左侧补1代表右移后还是负数。

在这里插入图片描述

3.无符号右移(>>>) :

即右移之后,无论该数为正还是为负,右移之后左补0。
在这里插入图片描述

总结

本篇文章讲解了位移运算符和位逻辑运算符。

  • 位逻辑运算符比较好理解,而且代码中见到的也很多,但是对其用途需要更多的使用才能熟练使用。
  • 位移运算符需要注意正负数,清楚什么时候补 0 什么时候补 1。

如果您觉得写得不错,不妨点个关注,谢谢。


网站公告

今日签到

点亮在社区的每一天
去签到