1. 位移操作符(对整数的二进制位进行左移右移)
位移操作符包括左移操作符和右移操作符
<< 左移操作符
>> 右移操作符
1.1左移操作符
<< 的移位规则是让左边的二进制位丢弃,右边补0
规则代码及图形举例
可以看出此时n的值是不变的,只是二进制位发生变化
1.2 右移操作符
右移操作符的移位规则:首先右移运算分为两种
1.逻辑右移:左边⽤0填充,右边丢弃
2.算术右移:左边⽤原该值的符号位填充,右边丢弃
决定采用哪种运算规则是根据采用哪种编译器来决定的,大多数编译器遵循算术右移的运算规则
规则代码及图形举例
2.位操作符
位操作符包括
1.& 按位与
2. | 按位或
3.^ 按位异或
4.~ 按位取反
注意这些操作符都是针对整数中得二进制位进行运算的操作符
2.1 & 按位与操作符
运算规则:对应的二进制位进行运算,有0则为0,同时为1才为1
规则代码举例
2.2 按位或操作符
运算规则:对应的二进制位进行运算,有1则为1,同时为0才为0
规则代码举例
2.3 ^ 按位异或操作符
运算规则:对应的二进制位进行运算,相同为0,相异为1
规则代码举例
2.4 ~按位取反操作符
运算规则:对应的二进制位进行取反即可
3 代码实践练习
3.1
根据按位异或的操作符的运算规则(相同为0,相异为1),我们不难想到,对于一个任意的整数n
n^0=n n^n=0 且异或操作符是可以实现交换律的 例如 a^b^a=b
根据这些思路我们可以写出以下代码
3.2编写代码实现:求⼀个整数存储在内存中的⼆进制中1的个数
方法1:
此方法注意传参使要让形参转化位无符号的整形,不然实现不了负数中的二进制位的个数
方法2
方法3
方法3 展示的是一种算法 感兴趣的可以尝试举例理解一下,下面我直接给结论
对于任意一个整数n n&n-1可以让n最右边的二进制位中的1变为0,直到全部为0 让n变为0,这样每次进行这样的一步操作就可以知道n中的二进制位中有一个1.所以可以写出下面的代码