Java基础---二进制与位运算符之间的关系

我们知道,计算机中的数据信息都是以二进制0、1形式存在的,具体来说是以该数据的补码形式。在位运算符中有:>>,<<, |,^,~,>>>。那么二进制数据与位运算符之间会有什么化学反应呢?下面先写一个小demo

package com.basic.day02;
/*
 * 测试 & | ^ ~
 * */
public class LogicTest2 {

	public static void main(String[] args) {
		int a = 4;
		int b = 7;
		System.out.println(a & b);//4
		System.out.println(a >> 2);//1
		System.out.println(a << 2);//16
		System.out.println(16 >>> 3);//2
		System.out.println(a | b);//7
		System.out.println(a ^ b);//3
		System.out.println(~ a);//-5
		System.out.println(~ b);//-8

	}
}

首先,我们将变量a,b换成2进制,然后按照0是false,1是true进行相应的计算。

&:按位与运算(0&1=0,1&0=0,0&0=0,1&1=1),

|:按位或运算(0|1=1,1|0=1,1|1=1,0|0=0)

>>:右移 (3>>1 == 3/2=1),即>>n,右移n次,就整除2的n次幂。符号位是0时,右移空缺补0;符号位是1时,右移空缺补1.

<<:左移(3<<2 == 3*2*2=12 ),即<<n,左移n次,就乘以2的n次幂。被移除的高位丢弃,空缺位补0.

>>>:无符号右移,空缺位补0.

^:按位异或(0^1=1,1^0=1,1^1=0,0^0=0),即不同才是true,相同才是false。

~:按位取反,各二进制按补位取反。先按位取反,得到一个负数,此时得到负数二进制的补码,然后在此基础上-1,得到反码(符号位不变),最后按位取反,得到负数的源码(符号位不变)。

 

posted @ 2022-02-21 17:13  小孙不是程序员  阅读(126)  评论(0编辑  收藏  举报
Live2D