1. 程式人生 > >java 位運算子與運算子的優先順序

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 );
	}
}

結果:

運算子的優先順序