位运算分为 7种,它们是:
按位与 | & |
按位或 | | |
按位异或 | ^ |
按位取反 | ~ |
左移运算 | << |
右移运算 | >> |
无符号右移运算 | >>> |
一.按位与
计算规则
按位与运算将参与运算的两数对应的二进制位进行与运算,当对应的二进制位均为 1 时,结果位为 1,否则结果位为 0。
二.按位或
计算规则
按位或运算将参与运算的两数对应的二进制位进行或运算,只要对应的二进制位中有 1,结果位为 1,否则结果位为 0。
三.按位异或
计算规则
按位异或运算将参与运算的两数对应的二进制位相异或,当对应的二进制位值不同时,结果位为 1,否则结果位为 0
四.按位取反
计算规则
按位取反运算将二进制数的每一个位上面的 0 换成 1,1 换成 0,包括符号位
五.左移运算
计算规则
左移运算将数对应的二进位都向左移动n位,高位丢弃,低位补 0.每移动一位相当于乘2
六.右移运算
计算规则
右移位运算,符号位不变,其余位均向右移动n位,低位溢出,溢出的高位用符号位补充
七,无符号右移
计算规则
无符号右移,二进制数中所有位均向右移动n位(包括符号位),高位补0
需要注意的是:这里用于计算的二进制数均为补码的存在.因为计算机中数字的存储和计算都是以补码的形式进行的
扩展
①位运算可以用于判断一个数的奇偶
public class Program {
public static void main(String[] args) {
System.out.println(isOddNumber(10)); //false
System.out.println(isOddNumber(11)); //true
System.out.println(isOddNumber(12)); //false
System.out.println(isOddNumber(13)); //true
System.out.println(isOddNumber(0)); //false
}
/**
* 判断一个数是不是奇数
* @param num 需要判断的数字
* @return 返回true,说明是奇数;返回false,说明是偶数
*/
public static boolean isOddNumber(int num){
if((num & 1) == 1){
return true;
}
return false;
}
}
按位与可以用于判断一个数是不是奇数,是因为奇数的二进制的最后一位一定是1,因此与其他数进行按位与运算之后,如果结果是1,就说明它是一个奇数
②用左移实现计算2 * 8 : 2 << 3
public class Program{
public static void main(String[] args){
System.out.println(2 << 3); // 16
}
}