java 位运算符与运算符的优先级

位运算符

位运算符:对二进制的直接运算

计算机内部的数据都是以二进制形式存在的,而二进制在计算机内部又有多种编码方式

计算机内部对二进制进行运算用的是补码

原码:第一位是符号位 0正1负

3: 0000 0011

反码:正数的反码和原码一样,负数的反码,保留符号位,其余位按位取反

-3:原码:1000 0011 -->反码:1111 1100 -->补码:1111 1101(反码+1)

补码(用得最多的,计算机存放数据是用补码来存的:正数同原码,负数补码=反码+1;

负数原码和补码之间的转换:

负数的原码=负数补码-1 再取反 =负数补码取反+1

package com.Other;

public class Other {
	public static void main(String[] args) {
		int a=128;//二进制1000 0000
		int b=129;//二进制1000 0001
		System.out.println("a = 128,b = 129");
		//按位与:同1才1
		System.out.println("a & b = "+ (a & b) );//运行结果为128  1000 0000
		
		//按位或:有1就1
		System.out.println("a | b = "+ (a | b) );//运行结果为129  1000 0000
		
		//异或:同0异1
		System.out.println("a ^ b = "+ (a ^ b) );//运行结果为1    0000 0001
		
		System.out.println("~a = "+(~a)  );//-129
		System.out.println("~b = " +(~b) );//-130
		
		//左移右移正负数计算方式相同
		//移位:  左移:右添0   右移:正数左添0,负数左添1
		System.out.println("2  << 3 = "+( 2  << 3 )); //左移 2 *(2的3次方)=16
		System.out.println("16 >> 3 = "+( 16 >> 3 )); //右移 16/(2的3次方)=2
		
		//无符号右移 正数负数都左添0
		System.out.println("-16  >>> 3 = "+( -16 >>> 3 ));
		
		System.out.println( true & true );
		System.out.println( true & false );
		System.out.println( false & true );
		System.out.println( false & false );
		
		System.out.println( true | true );
		System.out.println( true | false );
		System.out.println( false | true );
		System.out.println( false | false );
	}
}

结果:

运算符的优先级

猜你喜欢

转载自blog.csdn.net/CSDNLYFc/article/details/83475014