Javaにおける各種演算子(算術,増減,賦値,関係,論理,条件)および式の内容優先度の詳細な解析.

43708 ワード

演算子
概要
定数と変数の間で演算される記号は、例えば、a+1、a+b、a/b.a>bであり、+/>は演算子である
演算子の分類
算術演算子賦値演算子関係演算子論理演算子ビット演算子(理解)三目演算子
えんざんし
演算子:+-*/%
  • Javaには多くの意味がある.正数  2とする.加算演算  3.文字列コネクタ
  • どのように中の1つの数の各ビットを分離するか:1234/1%10 分離10位:1234/10%10 分離百位:1234/100%10 分離千位:1234/1000%10
    コードの例
    public class OperatorDemo01 {
    	public static void main(String[] args){
    		System.out.println(+5); // 5
    		System.out.println(2+5); // 7
    		System.out.println("2"+5); // 25
    		System.out.println(2-5); // -3
    		System.out.println(2*5); // 10
    		System.out.println((double)2/5); // 0
    		System.out.println(2%5); // 2
    		
    		int num = 1234;
    		int ge = num / 1 % 10;
    		int shi = num / 10 % 10;
    		int bai = num / 100 % 10;
    		int qian = num / 1000 % 10;
    		System.out.println(num + "," + ge + "," + shi + "," + bai + "," + qian);	
    	}
    }
    

    自己増減演算子+-
    ++-単項演算子に属する
    ++は自増1を表します–自減1を表します
    に分けて、単独で使用します.
    コードの例
    public class OperatorDemo02 {
    	public static void main(String[] args){
    		int a = 3;
    		int b = 4;
    		
    		System.out.println("a=" + a + ",b=" + b);
    		
    		//     
    		// a++;
    		// b--;
    		++a; // 4
    		--b; // 3
    		System.out.println("a=" + a + ",b=" + b);
    		
    		// int c = ++a;
    		// int d = --b; 
    		// a=5,b=2,c=5,d=2 
    		int c = a++;
    		int d = b--; 
    		// a=5,b=2,c=4,d=3
    		System.out.println("a=" + a + ",b=" + b + ",c=" + c + ",d=" + d); 
    
    	}
    }
    

    代入演算子
    =:このイコールはJavaで付与する意味を表し、真の数学的な意味でのイコールは==であり、JavaScriptでは==
    拡張代入演算子:+=、-=、*=、/=、%=例えばa+=10;計算結果ではa=a+10に等しい.
    short s1 = 1; s1 = s1 + 1;何が悪いの?short s1 = 1; s1 += 1;何が悪いの??  前者のコンパイルに失敗し、shortとintタイプの計算結果はintタイプであり、intタイプをshortタイプに付与するには、拡張付与演算子システムを使用すると自動的にタイプ変換を強制する必要があるため、強制タイプ変換 後者のコンパイルに合格する必要があります.
    テクニック:2つの数をどのように交換しますか?=>>中間変数tempを定義できます
    コードの例
    public class OperatorDemo04 {
    	public static void main(String[] args){
    		//    10     a [    :     ]
    		int a = 10;
    		//     
    		a = 20;
    		
    		a += 30; //     a = a + 30; 50
    		System.out.println(a);
    		a -= 10; //     a = a - 10; 40
    		System.out.println(a);
    		a *= 10; // 400
    		System.out.println(a);
    		a /= 10; // 40
    		System.out.println(a);
    		a %= 10; // 0
    		System.out.println(a);
    		
    		short s1 = 1; 
    		// s1 = s1 + 1; //       :  int   short      
    		s1 += 1; // s1 = (short)(s1 + 1);
    		System.out.println(s1);
    		
    		//        ?
    		int x = 100;
    		int y = 200;
    		
    		System.out.println("   : x = " + x + ",y= " + y);
    		int temp = 0;
    		temp = y;
    		y = x;
    		x = temp;
    		System.out.println("   : x = " + x + ",y= " + y);
    	}
    }
    

    関係演算子
    関係演算子には><>=<=!====注:リレーショナル演算子が比較演算に関与する結果はbooleanタイプでなければなりません.
    コードの例
    public class OperatorDemo05 {
    	public static void main(String[] args){
    		int a = 10;
    		int b = 20;
    		System.out.println(a>b); // false
    		System.out.println(a<b); // true
    		System.out.println(a>=b); // false
    		System.out.println(a<=b); // true
    		System.out.println(a==b); // false
    		System.out.println(a!=b); // true	
    	}
    }
    

    論理演算子
    作用:複数のbooleanタイプを接続するための式フォーマット:booleanタイプの式1論理演算子booleanタイプの式2論理演算子booleanタイプの式3論理演算子は&、|、!
    論理関係:直列回路に類似し、両側が同時に成立し、結果が成立し、1つが成立せず、結果が成立しない、または:並列回路に類似し、両側が同時に成立しなければ、結果が成立せず、1つが成立し、結果成立非:元の結果とは逆の異或:恋愛関係「同性が反発し、異性が吸い合う」に似ており、両側が異なると結果が成立し、両側が同じであれば結果は成立しない
    実は論理関係を備えているのは論理演算子だけでなくビット演算子もあります.~【取反】はビット演算子に属し、論理演算子ではないが論理関係がある&【ビット別に】、|【ビット別に】、^【ビット別に】複数のbooleanタイプを接続する式と&【短絡と】、|【短絡または】、【非】は論理演算子に属し、論理演算のみが可能でビット演算はできない.
    と&&:falseの結果がfalse反則を取る!の個数が奇数個の場合、結果は逆になります.の個数が偶数の場合、結果は変わらない
    &と&&の違いと|と|の違いを表すビットと、どんな場合でも演算子の両方の式を同時に計算します.論理と短絡とを表します.前の式がfalseであれば、後の結果にかかわらず、後の式の値は計算されず、短絡現象が発生します.ビット演算の効率は通常の演算よりずっと高い
    コードの例
    public class OperatorDemo06 {
    	public static void main(String[] args){
    		int a = 10;
    		int b = 20;
    		System.out.println(a>b & a<b); // false & true = false
    		System.out.println(a<b & a>b); // true & false = false
    		System.out.println(a>b & a>b); // false & false = false
    		System.out.println(a<b & a<b); // true & true = true
    		
    		System.out.println(a>b | a<b); // false | true = true
    		System.out.println(a<b | a>b); // true | false = true
    		System.out.println(a>b | a>b); // false | false = false
    		System.out.println(a<b | a<b); // true | true = true
    		
    		System.out.println(a>b ^ a<b); // false ^ true = true
    		System.out.println(a<b ^ a>b); // true ^ false = true
    		System.out.println(a>b ^ a>b); // false ^ false = false
    		System.out.println(a<b ^ a<b); // true ^ true = false
    		
    		System.out.println(!!!!!!!(a>b)); // !false = true*/
    		
    		System.out.println("====================");	
    		
    		System.out.println(a>b && a<b); // false & true = false
    		System.out.println(a<b && a>b); // true & false = false
    		System.out.println(a>b && a>b); // false & false = false
    		System.out.println(a<b && a<b); // true & true = true
    		
    		System.out.println(a>b || a<b); // false | true = true
    		System.out.println(a<b || a>b); // true | false = true
    		System.out.println(a>b || a>b); // false | false = false
    		System.out.println(a<b || a<b);*/ // true | true = true
    		
    		/*System.out.println("====================");	
    		System.out.println(a>b && (10 / 0) == 0); //     ,    
    		
    		System.out.println(a //     ,   
    		System.out.println("====================");
    		System.out.println(9 & 6); // 0   ①
    		System.out.println(9 | 6); // 15   ②
    		System.out.println(9 ^ 6); // 15   ③
    	}
    }
    ① ② ③       : 
    1001 & 0110 =1 0 0 1
    		&	0 1 1 0
    		---------------
    			0 0 0 0
    			
    		1001 | 0110 =1 0 0 1
    		|	0 1 1 0
    		---------------
    			1 1 1 1
    				
    		1001 ^ 0110 =1 0 0 1
    		^	0 1 1 0
    		---------------
    			1 1 1 1
    		
    

    条件演算子
    条件演算子(3つの演算子):
    書式:X?Y : Z   1.X式はboolean型の式 2でなければならない.Y式とZ式のタイプは任意のタイプとすることができるが、YとZのタイプは一致しなければならない.式全体の値のタイプはYのタイプまたはZのタイプ実行フローです.まず、X式の結果を計算します.Xの結果がtrueの場合、式全体の結果はYの値です.X式の結果がfalseの場合、式全体の結果はZの値です.注意:三目演算子のネストの問題について、かっこを使用して可読性を向上させる必要があります
    コードの例
    public class OperatorDemo07 {
    	public static void main(String[] args){
    		
    		//           
    		int a = 300;
    		int b = 200;
    		
    		int max = 0;
    		max = a > b ? a: b;
    		System.out.println("         : " + max);
    		
    		//           
    		int x = 100;
    		int y = 200;
    		int z = 300;
    		max = (x > y) ? (x > z ? x: z): (y > z ? y: z);
    		System.out.println("         : " + max);
    		
    		//         90 ,      ,  90       
    		String result = "";
    		double score = 80;
    		result = score > 90 ? "      ": "     ";
    		System.out.println(result);
    		
    	}
    

    式#シキ#
    式:一定の構文規則に合致する演算子とオペランドの式
    ここで、演算子とオペランドとは、演算子、代入演算子、関係演算子、論理演算子、ビット演算子(了解)、三目演算子0
    式の分類:例えば+5-6++a、3+a、x?y:z
    式の値:式全体の結果式の値を表すタイプ:式全体の結果値を表すデータ型
    次のような複雑な式の演算に対して、演算子の優先度(a-b)*c-4 i<30&&i%10!=0
    次の表を参照してください.
    優先度
    説明
    演算子
    1
    かっこ
    ()、[]
    2
    プラスマイナス
    +、-
    3
    自増自減、非
    ++、–、!
    4
    余剰を取る
    *、/、%
    5
    プラスマイナス
    +、-
    6
    シフト演算
    <>、>>>
    7
    サイズの関係
    >、>=、
    8
    等しい関係
    ==、!=
    9
    ビットと
    &
    10
    ビット別異動
    ^
    11
    ビット単位または
    |
    12
    ロジックと
    &&
    13
    論理または
    ||
    14
    じょうけんえんざん
    ?:
    15
    わりあてえんざん
    =、+=、-=、*=、/=、%=
    16
    ビットわりあてえんざん
    &=、
    表を観察することによって、以下の一般的な演算子の優先度の特徴を大まかにまとめることができる.括弧がある場合は、括弧の中の単項演算子>両目演算子>三目演算子 3.演算子(*/%>+-)>リレーショナル演算子(>=!=)>論理演算子(&>|)>条件演算子>代入演算子 4.演算子の優先度が同じ場合は、左から右へ付与演算子右から左へ
    コードの例
    public class OperatorDemo08 {
    	public static void main(String[] args){
    		int i = 10;
    		// i < 30 && i % 10 != 0; 			
    		// (i < 30) && ((i % 10) != 0)  true && false = false
    		boolean result = i < 30 && i % 10 != 0;
    		System.out.println(result);
    		
    		    // 7.int x = 4 , y = 2 , z = 3;    y-=z++*--x     ?       ,x,y,z       ?
    		int x = 4;
    		int y = 2;
    		int z = 3;
    		y -= z++*--x;
    		/*
    			y -= ((z++)*(--x)); ==> y = y - ((z++)*(--x))
    			y = y - ((z++)*(--x))
    			x 4 3
    			y 2 -7
    			z 3 4
    			y = 2 - (3*3) = 2 - 9 = -7
    		*/
    		System.out.println("x=" + x + ",y=" + y + ",z=" + z);	
    	}
    }