【C语言】位运算 {位运算的应用 :关闭位,判断位,打开位,转置位;位域}
一、基础
-
参与位运算的对象只能是整型数据(int, unsigned, char),不能为实型
-
移位操作符
- 按位左移n位表示:原数*2^n
- 按位右移n位表示:原数/2^n(整除)
- 上述运算只适用于左右移位时被溢出舍弃的位不包含1的情况
二、位运算的应用
掩码:一串二进制数字通过与目标数字进行按位操作来达到屏蔽指定位的需求而实现的。掩码具有目标性,关注位为1。
-
按位与
-
关闭位(清零)[~掩码&目标值]
举例:关闭第4位和第7位
11001000 //目标
01001000 //掩码
10110111 //~掩码
10000000 //结果 -
判断位(取一个数中的某些指定位)[掩码 & 目标值]
举例:判断后四位
11001010 //目标
00001111 //掩码
00001010 //结果 -
其他
字符小写转大写:ch&=~32;
提示:对应大小写字母ASSIC码的二进制数只有第六位不同,因此可以通过操作第六位实现大小的相互写转换
-
-
按位或
-
打开位(对一个数据的某些位赋1)[掩码 | 目标值]
举例:打开3,4,6,8位
11001010 //目标
00110101 //掩码
11111111 //结果 -
其他
字符大写转小写:ch|=32;
-
-
按位异或
-
转置位(使指定位翻转)[掩码 ^ 目标值]
举例:转置第2,5位
11000000 //目标
01001000 //掩码
10001000 //结果
-
其他
- 交换两变量的值:a=a^b; b=a^b; a=a^b;
- 字符大小写互换:ch^=32;
- 两个相同的整数按位异或得0
- 任何整数与0按位异或都得它本身
-
三、位域