java 位運算子與運算子的優先順序
阿新 • • 發佈:2018-11-14
位運算子
位運算子:對二進位制的直接運算
計算機內部的資料都是以二進位制形式存在的,而二進位制在計算機內部又有多種編碼方式
(計算機內部對二進位制進行運算用的是補碼)
原碼:第一位是符號位 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 ); } }
結果:
運算子的優先順序