JavaSE学習ノート——演算子

14415 ワード

Javaの演算子
JAva演算子:数学演算子、ビット演算子、論理演算子、自増演算子、比較演算子、三木演算子.シフト演算子演算子演算子の閉鎖性:javaの演算子には閉鎖原則がある.同種のデータが計算に参加し、同種の結果を得る.異なるタイプのデータが計算に関与する場合、大きなタイプの結果が得られる.
数学演算子
プラス(+)マイナス(-)プラス(*)マイナス(/)マイナス(%)マイナス(%)プラス(%)1.プラス(%)プラス(%)プラス(%)プラス(%)プラス(%)マイナス(%)プラス(%)マイナス(%)プラス(%)マイナス(%)プラス(%)プラス(%)マイナス(%)プラス(%)プラス(%)マイナス(%)プラス(%)マイナス(%)プラス(%)プラス(%)マイナス(%)プラス(%)マイナス(%)プラス(
    int i=1;
    double d=1.2;
    //java       ,int double     double
    double result=i+d;
    System.out.println(result);

    int i1=3;
    int i2=4;
    //java       ,int   int       int
    int i3=i1/i2;
    System.out.println("i3="+i3);//0 
    double i4=(double)i1/i2;
    System.out.println("i4="+i4);//0.75  

    int max=0x7fff_ffff;
    int a=max+1;
    //          .       
    System.out.println("a="+a);//a=-2147483648        

じこぞうふくえんざん
接頭辞の自己増加:++a/–a、まずaの値に1を加えて式の値とします.接尾辞の自己増加:a++/a–、まずaの値を式の値として、それからaは更に1.+=*=/=%=-=を加えます
    int a=1;
    //    ,  a    a++  ,        a+1
    int b=a++; //a=a+1
    System.out.println("a="+a+" ,b="+b);//a=2,b=1;

    int x=1;
    //    ,  a  +1,   a           
    int y=++x;
    System.out.println("x="+x+" ,y="+y);//x=2,y=2       

    int z=2;
        z=z++;
    //  z=2:java                    
    System.out.println("z="+z);

    byte c=1;
    //       jvm      
    byte d=++c; //d=c+1;
    System.out.println("d="+d);//d=2;
            d+=4;//d=d+4;
    System.out.println("d="+d);  

    int i=3;
        i+=4;//i=i+4;
    System.out.println("i="+i);

    int m=1;
    int n=++m+m++;
    System.out.println("n="+n+",m="+m);//n=4,m=3

ビット演算子
特徴:java中の整数に対してビット演算を行う.本質は整数のバイナリ対応の位置を計算する
1
に適合
説明
ビットと
&
同じ1が1、その他は0
ビット単位または
|
同じ0は0、その他は1
異或
^
同じ0、異なる1
に逆らう
~
一元演算記号、ビットによって逆をとる
    int x=3;// 0000_0011
    int y=7;// 0000_0111

    int and=x&y; //0000_0011    
    System.out.println("and="+and);//3

    int or=x|y;// 0000_0111; 
    System.out.println("or="+or);//7

    int other=x^y;//0000_0100;
    System.out.println("other="+other);//4

    int back=~x;// 24 1_1111_1100
    System.out.println("back="+back);//-4

    //         ,          
    int a=100;//‭0110_0100‬
    int b=200;//‭1100_1000‬
    System.out.println("   :a="+a+",b="+b);
    // result=a^b    //1010_1100
    // result^a      //1100_1000
    // result^b      //0110_0100
    int result=a^b;
    a=result^a;
    b=result^b;
    System.out.println("   :a="+a+",b="+b);

シフト演算子
特徴:javaは整数型に対して直接そのバイナリをシフト操作する.シフト演算>=>>=<=
説明
アイコン
説明
左に移動
n<<
nを左にmビット移動し、最下位は0補完
符号付き右シフト
n>>m
nを右にmビット移動し、最上位にシンボルビットを使用して補完
符号なし右シフト
n>>>m
nを右にmビット移動し、最上位は0補完を使用
    int result=2<<3;
    System.out.println("      2       :"+result);        

    //    ,       
    int a=2<<30;
    System.out.println("a="+a);//-2147483648
    //        ,          .[     32  ]
    int b=2<<35;//16   35%32=3
    System.out.println("b="+b);

    int i=-1;//-1     32 1
    //      ,          
    int c=i>>1;
    System.out.println("c="+c);//c=-1
    int d=i>>>1;//     ,     0  
    System.out.println("d="+d);// d=0x7fff_ffff

    byte f=0b0110_0100;//100
    //  f    0000_0110     0000_0100
    //   
    byte low=(byte)(f&0x0f);//(byte)(f&0B0000_1111);//4
    System.out.println(low);
    //   
    //1.                     
    byte high=(byte)((f>>>4)&0xf);
    System.out.println("high="+high);//6

比較演算子
特徴:比較関係、比較演算子の結果はブールタイプ.>=<===!=,注意:javaの等号は付与記号であり、二等号は比較変数値の比較演算子を用いる.
   boolean flag=1==2;//flag=false
   //  age     [22,40]
   int age = 18;
  // boolean noHappy=22<=age<=40;//    ,java        

論理演算子
特徴:式間の論理関係
説明
構文
説明

exp1 && exp2
exp 1とexp 2がtrueの場合、結果はtrue、そうでない場合false
または
exp1 || exp2
epx 1とexp 2がfalse、結果falseの場合true

!exp1
逆に、exp 1がtrue、falseのように
    Scanner sc=new Scanner(System.in);
    System.out.println("     :");
    int age=sc.nextInt();
    //  age   [22,40]
    // boolean noHappy=(age>=22 && age<=40);
    boolean noHappy=(age>=22 & age<=40);
    System.out.println("   :"+noHappy);
    //  age     18,  60
    // boolean happy=(age<=18 || age>=60);
    boolean happy=(age<=18 | age>=60);
    System.out.println("    :"+happy);
  • &&&&,|と|の違いは?
  • &,|ビット演算子としても論理演算子としても
  • &,|論理演算子
  • としてのみ使用できます.
  • &&,|短絡機能,&,|論理演算子として短絡機能を備えていない
  • 短絡の概念:論理式の中で、第1の表現が式全体の値を判断することができるならば、第2の表現は実行しません.&と|を論理演算子として使うことを提案して、プログラムの実行の効率を高めることができます
  •     int x=1;
        int y=2;
        boolean flag=(x++>0||--y<2);//      
        System.out.println("flag="+flag+" ,x="+x+" ,y="+y);//true,2,2
    
        int a=1;
        int b=2;
        boolean flag2=(a++>0|--b<2);//       
        System.out.println("flag2="+flag2+" ,a="+a+" ,b="+b);//true,2,1
    
        int i=1;
        int j=2;
        int k=3;
        //  :        ,          
        boolean flag3=(i++>0 || j--<3 && --k<3);
        //    flag3= (i++>0) || (j--<3 && --k<3) ;
        //true,2,2,3
        System.out.println("flag3="+flag3+" ,i="+i+" ,j="+j+" ,k="+k);

    さんこうえんざんし
    特徴:三目演算子はif..elseの略です.基本文法:ブール式?trueの結果:falseの結果
        Scanner sc=new Scanner(System.in);
        System.out.println("      :");
        int total=sc.nextInt();
        System.out.println("        :");
        int pageSize=sc.nextInt();
        //     
        /*
        int size=0;
        if(total%pageSize==0){//      
            size=total/pageSize;
        }else{
            size=total/pageSize+1;
        }
        */
        //  (  )  
        int size=total%pageSize==0?total/pageSize:total/pageSize+1;
        System.out.println("    :"+size);

    三木演算子はネストできます
        //  :      3   ,               (        )
        System.out.println("       ");
        int a=sc.nextInt();
        int b=sc.nextInt();
        int c=sc.nextInt();
        //     
        int max=a>b?(a>c?a:c):(b>c?b:c);//           
        System.out.println("max="+max);