java数据在内存中以二进制的形式表示,例如int类型数据3的二进制表是000000 00000000 00000000 00000011 左侧最高位为符号位,最高位为0,如果为1,则为负。
计算方法按最右边2的幂次方计算 从0开始 ,3的计算是20次幂加21次幂 依次向左计算,如果是0,则排除运算。
1.按位和运算(&) :如果按位和运算两个操作数,相应的位数为1,则结果位为1,否则为0
2.按位或运算(|): 如果按位或计算两个操作数,相应的位数为0,则结果位为0,否则为1
3.按位取反(~):将操作数二进制中的1改0,0修改为1
4.根据位异或运算(^):两个操作数的二进制表示相同(同为0或同为1)的结果为0,否则为1。
5.移位操作
<<左移:将操作符左侧操作数的二进制数据按照右侧操作数指定的位数向左移动,右侧空出的部分补0,
>>右移:如果最高位为0,则右移空位为0,如果最高位为1,则右移空位为1
>>>无符号右移:无论最高位是0还是1,左侧的空位都是0
/** * @author qx * @date 2023/06/04 * @desc 学习位运算符 */public class BitDemo { public static void main(String[] args) { // 二进制 00000000 00000000 00000000 00000101 int a = 5; // 二进制 00000000 00000000 00000000 00000100 int b = 4; // 1.按位与 & // 如果按位和运算两个整数(&)的时候,对应的位数为1,结果位为1,否则是0 int result1 = a & b; // 按位和运算后的二进制是 00000000 00000000 00000000 00000100 输出4 System.out.println(result1); // 2.按位或 | // 若两个整数按位或运算(|),对应的位数为0,结果位为0,否则是1 int result2 = a | b; // 按位或运算后的二进制是 00000000 00000000 00000000 00000101 输出5 System.out.println(result2); // 三、按位取反运算 ~ 取反后减去1 左侧最高位置保留 int result3 = ~b; // 按位取反运算后的二进制是 11111111 11111111 11111111 11111011 输出-5 // 11111011-1 = 11111010 再取反 10000101 =-5 System.out.println(result3); // 4.根据位异或运算(^) 两个操作数的二进制表示相同(同为0或同为1)的结果为0,否则为1 int result4 = a ^ b; // 按位异或运算后的二进制 00000000 00000000 00000000 00000001 输出1 System.out.println(result4); // 5.左移位操作(<<) 根据右边操作数指定的位数,将操作符左侧操作数的二进制数据向左移动,右侧空出部分补0, int reult5 = 2 << 2; // 00000010 左移2位变 00001000=8 System.out.println(reult5); // 6.右移(>>):若最高位为0,如果最高位是1,右移空位就补0,右移空补1 int result6 = 2 >> 2; // 00000010 右移2位变 00000000=0 System.out.println(result6); // 7.无符号右移(>>>):无论最高位是0还是1,左侧被移空的位置补0 int result7 = 2 >>> 2; // 00000010 右移2位无符号 00000000=0 System.out.println(result7); }}
执行程序
45-51800