所谓位运算,就是对一个比特(Bit)位进行操作。在《二进制思想以及数据的存储》一节中讲到,比特(Bit)是一个电子元器件,8个比特构成一个字节(Byte),它已经是粒度最小的可操作单元了。
C语言提供了六种位运算符:
按位与运算(&)
一个比特(Bit)位只有 0 和 1 两个取值,只有参与
&
运算的两个位都为 1 时,结果才为 1,否则为 0。例如
1&1
为 1,
0&0
为 0,
1&0
也为 0,这和逻辑运算符
&&
非常类似。
C语言中不能直接使用二进制,
&
两边的操作数可以是十进制、八进制、十六进制,它们在内存中最终都是以二进制形式存储,
&
就是对这些内存中的二进制位进行运算。其他的位运算符也是相同的道理。
C语言位运算
有6种: &, | , ^(亦或), >(右移)。
注意:参与位运算的元素必须是int型或者char型,以补码形式出现。小编推荐一个学C语言/C++的学习裙【 六二七,零一二,四六四 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!
按位与&
&运算常应用于:
迅速清零
保留指定位
判断奇偶性
a & 1 = 1;则a为奇数
b & 1 = 0;则a为偶数
按位或|
按位或(“|”)用途:设定数据的指定位
按位异或^
异或 就是位相同等于零,相异等于1
按位异或作用:
1.定位反转
2.交换数值
//交换a和b的值
按位取反~
左移、右移
让二进制左移N位,高位丢弃,低位补0,得到的 新值 = 原值*2^N,
作用:实现二倍乘除运算(右移几位相当于除于二的几次方。左移几位,相当于乘上二的几次方。)
问题:int是有符号类型,左移可能会把符号左移出去,发生溢出。