Javaベース - あなたは本当に演算子を理解していますか?

序文

オペレーターのJavaベースの学習は、物品は、いくつかの学生が、私はあなたがコンピュータ理論、書籍のコンピュータ組成カテゴリについて学ぶために行くことを示唆している算術平均ビットかわからないということであれば、あなたは、数学とコンピュータの理論のための一定の要件を持っているということです、あなたが持っていない、深さあまりにも多く、長いコンピュータは、おそらく構造、変数ストレージ、関連するビットコンピューティング、抗コードなどを理解して、あなたが学ぶするのが面倒であればもOK、Javaまたはそれを学ぶために続けることができますが、いくつかのコンピューティングパワーの損失であるが、当然のことながら、著者は、例を使用しようとします記事の私は読者のために要求され、以下に詳細に説明され、これは終わりを見なければならない読者のために良い基盤でない読者がコンピュータビットコンピューティングの欠如の原理を理解しましょう0ベースである著者は、再びノックに続いて、読んでその後、オンラインまたは手の練習を対応するトピックを見つけるための本で

オペレータでjava8新機能は、この記事には表示されませんについては、上級者は初心者が学び、基礎のより基本的な記事を参照一連の列を勉強したいために、この記事によると、作者にアクセスすることができます。

二つの算術演算子

2.1単項

単項演算子のみ演算式を実行するための手段、式は、数値データ型のカテゴリの任意のデータ型とすることができる。式は、変数(例えばA)とすることができる、または可変とすることができるどのようなタイプの発現、そして、数学記号の組み合わせ(例えば、+のB)。

単項演算子

  1. - 識別反転、負反転が正の数であり、nは否定負の数です。
  2. - デクリメント、デクリメント手段その変数自体マイナス1
  3. 変数自体プラス1という意味++インクリメント、インクリメント、

例:

public class Arithmetic {

    public static void main(String[] args) {

        int zszxz1 = 100;
        // 取负
        int a = -zszxz1;
        // 自减先赋值后运算
        int b = zszxz1--;
        // 自减先运算后赋值
        int c = --zszxz1;
        // 自增先赋值后运算
        int d = zszxz1++;
        // 自增运算后赋值
        int e = ++zszxz1;
        System.out.println("取负:"+a);//-100
        System.out.println("自减先赋值后运算:"+b);//100 先将 zszxz1赋值给b,zszxz1再减1
        System.out.println("自减先运算后赋值:"+c);//98 (注意此时zszxz1值是99)先将 zszxz1 减1 再复制给c
        System.out.println("自增先赋值后运算:"+d);//98 (注意此时zszxz1值是98)先将 zszxz1 赋值给 d 再将 zszxz1加1
        System.out.println("自增运算后赋值:"+e);//100 (注意此时zszxz1值是99) 先将 zszxz1 加1 再赋值给 e

    }
}

バイナリ演算子2.2

二項演算は、第三の要素は、二つの要素によって形成されるルールであり、その意味は、それがオペレータによって中間結果に接続され、二つの式について言うことである、非常に簡単です。

  1. + 2つの式を追加することを意味。
  2. - 手段に2つの式を引くと、
  3. * 手段乗算二つの表現。
  4. 2つの式を取る/サプライヤー手段;
  5. 以上の2つの式が取られていること%意味します。

例:

    public static void main(String[] args) {

        int zszxz2 = 10;
        int zszxz3 = 3;
        int a = zszxz2 + zszxz3;
        int b = zszxz2 - zszxz3;
        int c = zszxz2 * zszxz3;
        int d = zszxz2 / zszxz3;
        int e = zszxz2 % zszxz3;

        System.out.println("相加 :"+a);// 13
        System.out.println("相减 :"+b);// 7
        System.out.println("相乘 :"+c);// 30
        System.out.println("求商 :"+d);// 3
        System.out.println("取余 :"+e);// 1
        // 10 除以 3 是 商是 3 余数为1  你可以反过来理解 3 * 3 + 1 = 10 
    }

三つの割り当て

  1. =割り当て手段、複製プロセスは、別の変数に対して、変数の値です。
  2. そして、割り当て手段プラス+ =;
  3. - =減算および割当手段と
  4. * =乗算手段と割り当て。
  5. / =サプライヤーと取ら割当手段と
  6. %=剰余と割当手段と

例:

    public static void main(String[] args) {
        int zszxz4 = 10;
        int zszxz5 = 3;

        int a = zszxz4;
        System.out.println("赋值:"+a);//10
        // 等同于 zszxz5 = zszxz5 - zszxz4
        zszxz5 -= zszxz4;
        System.out.println("减并赋值 :"+zszxz5);//-7
        // 等同于 zszxz5 = zszxz5 + zszxz4
        zszxz5 += zszxz4;
        System.out.println("加并赋值 :"+zszxz5);//3
        // 等同于 zszxz5 = zszxz5 * zszxz4
        zszxz5 *= zszxz4;
        System.out.println(" 乘并赋值:"+zszxz5);//30
        // 等同于 zszxz5 = zszxz5 / zszxz4
        zszxz5 /= zszxz4;
        System.out.println(" 取商并赋值:"+zszxz5);//3
        // 等同于 zszxz5 = zszxz5 % zszxz4
        zszxz5 %= zszxz4;
        System.out.println("取余并赋值 :"+zszxz5);//3
    }

四事業者

4.1操作の説明:

コンピュータはバイナリ算術演算を使用して実行されたとき、多くのコンピュータのビット単位の演算子が、それは0と1の動作(例えば、0000 1000)、を使用すると言われ、正と負の数は、元のコードのホストコンピュータ表現を有する、反転そして補体(逆相補コード= 1)計算方法は、後述します。

その後、ビット操作、である何バイナリビット演算の結果を使用してビット演算手段、詳細な説明は、次の表に記載されている符号ビットの事業を展開しています。下の写真は、より良いどの位置に理解を読者に役立つことができ、各ビットは、私たちが望む結果を得るでしょうコンピューティングの後、2のべき乗であり、さまざまな異なる進数、データのビットの異なる種類が異なっています

ビットマップの例コンピューター:

ここに画像を挿入説明

4.2演算符号

初心者は、自分自身を実装する場合、通常の位置演算子とあまり差が割り当てに計算ビット、著者は、詳細には触れません。

演算符号 意味 説明
<< これは、署名の左を表し、 低塗りつぶし0
>> それは右シフトを表し、 高い正、負の高S.1を0S
>>> 符号なし右シフト ハイアップ0
否定 逆元のコードを取得します。
ビットと フェーズ2つのオペランド
| 位置や または二つのオペランドと
^ ビットXOR 二つの異なる操作や
<< = 左シフト後代入 << = B <=> A = B <<
>> = 右シフト後代入 >> = B <=> A = A >> B
>>> = 符号なし右シフト後代入 >>> = B <=> A = A >>> B
&= ビットANDと代入 A&B = <=> A =&B
| = ビットごとのORと代入 | = B <=> A = A | B
^ = ビットごとのXORと割り当て ^ = B <=> A = A ^ B

4.3負

手段コードの絶対値の負のオリジナル値と、その後ネゲート、操作プラス1、否定ビットの平均数の反転値、のみバイナリ0および1は、0 1,1を取るために反転されますアンチは0であり;注意コンピュータは、符号ビットの最上位ビットを示す正0、負のための1、左右移動、元のコード(元のバイナリ)の陽性症状、演算結果のビットこと精度は、失われた比較的単純されないが、以下は例示ではなく、ビットシフト用負詳述しません。

バイト6の例のように:

  1. 0000 0110:バイナリ6 -6絶対値
  2. 6抗コード:11111001
  3. 反転6プラス1:11111010

遷移INT(32ビット)をデフォルトするJavaバイトでは、我々は、高ビットがINT 1、最終的な結果は、-6のように表現されているデフォルト:
1,111,111,111,111,111 1,111,111,111,111,010を

さて、あなたは計算の上に、このプロセスの逆を計算する必要があるときに、ああ、あなたは私たちが知っていることを負の数になるだろう。実際には、操作の学習法の背後にある、あなたが本当に計算する必要はありません、ように見えます、私はあなたがジーの学習に自信を失う恐れていました。

  public static void main(String[] args) {

        byte zszxz1 = -6;
        // -6
        System.out.println(zszxz1);
    }

左4.4

比較的単純な左、操作の統治は、ビットの数は、直接である場合、左、低い直接充填0に、精度の損失の場合には発生しません

    public static void main(String[] args) {

        byte zszxz1 = -6;
        // -24
        System.out.println(zszxz1<<2);
    }

私たちは(、上記の逆のプロセスであること)を分析する必要があります。

  1. -6バイナリ:1,111,111,111,111,111 1,111,111,111,111,010
  2. -6二つ左:1,111,111,111,111,111 1,111,111,111,101,000
  3. マイナス1:1,111,111,111,111,111 1,111,111,111,100,111
  4. 0000 0000 0000 0000否定0,000,000,000,011,000
  5. マイナス記号を計算した後:- ( 2^3 + 2^4) = -(8 + 16) =-24

4.5右

ビット単位の右には発生しないを実行しているときに1に精度の損失の場合には負の数の補数であり、0は補体高く、正の数です

  1. -6バイナリ:1,111,111,111,111,111 1,111,111,111,111,010
  2. -6右2:1,111,111,111,111,111 1,111,111,111,111,110
  3. マイナス1:1,111,111,111,111,111 1,111,111,111,111,101
  4. 0,000,000,000,000,000 0,000,000,000,000,010反転
  5. マイナス記号を計算した後:- ( 2^1 ) = -2
public static void main(String[] args) {

        byte zszxz1 = -6;
        // -2
        System.out.println(zszxz1>>2);
    }

4.6符号なし右シフト

符号なし右シフトは、符号なしの移動手段、高いビット0であり、直後の符号なし右精度の負の損失をもたらし得ます。

  1. -6バイナリ:1,111,111,111,111,111 1,111,111,111,111,010
  2. -6 2の符号なし右シフト:0,011,111,111,111,111 1,111,111,111,111,110
  3. 計算:2^1 +2^2+.......+2^29 = 1073741822
 public static void main(String[] args) {

        byte zszxz1 = -6;
        // 1073741822
        System.out.println(zszxz1>>>2);
    }

我々はテストヘイローに行って16進数に変換しました:

 public static void main(String[] args) {

        int z = 0x3ffffffe;
        // 1073741822
        System.out.println(z);
    }

4.7否定

上記の内容で否定された〜記号は、基づいています。

  1. -6バイナリ:1,111,111,111,111,111 1,111,111,111,111,010
  2. -6否定:0000 0000 0000 0000 0000 0000 0101
  3. 計算: ( 2^1 + 2^2)= 5
public static void main(String[] args) {
        // -5
        System.out.println(~-6);
    }

4.8と

ビット&AND演算記号を使用して、手段だけ1つのフェーズ1及び結果は、そうでなければ結果は0相である、1です。

  1. 19は、言った:00010011
  2. 17は表し:0001 0001
  3. フェーズは:0001 0001
public static void main(String[] args) {
    // 19
    byte zxzxz1 = 0b00010011;
    // 17
    byte zxzxz2 = 0b00010001;
    // 17
    System.out.println(zxzxz2 & zxzxz1);
}

4.9または

ビットOR演算記号を使用して|、および0または0でのみ0、その他の場合は1です。

  1. 19は、言った:00010011
  2. 17は表し:0001 0001
  3. フェーズかいる:00010011
    public static void main(String[] args) {
        // 19
        byte zxzxz1 = 0b00010011;
        // 17
        byte zxzxz2 = 0b00010001;
        // 19
        System.out.println(zxzxz2 | zxzxz1);
    }

4.10 XOR

ビット単位のXOR記号^は、ビット1の対応するビット値(例えば、0と1)が異なる場合には、同一の値が0(例えば、1,1)です。

  1. 19は、言った:00010011
  2. 17は表し:0001 0001
  3. XORされました:0010 0000
public static void main(String[] args) {
        // 19
        byte zxzxz1 = 0b00010011;
        // 17
        byte zxzxz2 = 0b00010001;
        // 2
        System.out.println(zxzxz2 ^ zxzxz1);
    }

V.関係演算子

関係演算子は、2つの式を比較する関係で、CのようなJavaは、また6つの関係演算子を提供しています。その値は、それが真と偽のように数学の習慣では、ブール型であり、唯一の真、または偽のとおりです。

演算子 意味
> より大きい A> B、Bよりも、そのtrueを返し、falseの場合そうでありません
< 以下 A <Bは、以下B以上である場合はtrue、そうでない場合はfalseを返します。
== 等しいです A == B、Bと等しい場合はtrue、そうでない場合はfalseを返します。
> = 以上で > = B、Bに等しいより大きい場合、trueを返し、そうでない場合はfalse
<= 以下で a <= b , 若 a小于等于b,返回true,否则返回false
!= 不等于 a !=b , 若 a不等于b,返回true,否则返回false

public static void main(String[] args) {

    int zszxz1 = 1024;
    int zszxz2 = 1327;
    // 判断大于
    boolean a = zszxz1 > zszxz2;
    // 判断小于
    boolean b = zszxz1 < zszxz2;
    // 判断等于
    boolean c = (zszxz1 == zszxz2);
    // 判断大于等于
    boolean d = zszxz1 >= zszxz2;
    // 判断小于等于
    boolean f = zszxz1 <= zszxz2;
    // 判断不等于
    boolean g = zszxz1 != zszxz2;

    // 输出
    System.out.println("1是否大于2:"+a);//false
    System.out.println("1是否小于2:"+b);//true
    System.out.println("1是否等于2:"+c);//false
    System.out.println("1是否大于等于2:"+d);//false
    System.out.println("1是否小于等于2:"+f);//true
    System.out.println("1是否不等于2:"+g);//true

}

六 逻辑运算符

逻辑运算符是指 对两个表达式(他们的结果都是为true或者false)进行运算,其结果也是布尔型;

运算符 含义 说明
表示取非 若表达式为true,取非后为false;若表达式为false,取非后为true
| 表示相或 false跟false相或为false,其他情况都为true
& 表示相与 true跟true相与为true,其他情况都为false
|| 表示短路或 false跟false相或为false,其他情况都为true
&& 表示短路与 true跟true相与为true,其他情况都为false

短路与和短路或 跟 普通的与和或相比,其速度更快;比如 a || b 若 a为真,那么整个式子就为真,不会再去判断 b,仅当 a为假的时候才会判断b;再比如 a && b ,若 a 为 假,那么整个式子都为假,不会再去判断b,仅当a为真时,才去判断b的真假性;普通的或和与都会进行判断,固推荐使用短路与,短路或提高运算效率;

public static void main(String[] args) {

    boolean zszxz1 = 1 > 2;//false
    boolean zszxz2 = 1 < 2;//true

    // 取非
    boolean a = !zszxz1;
    // 逻辑与
    boolean b = zszxz1 & zszxz2;
    // 逻辑或
    boolean c = zszxz1 | zszxz2;
    // 短路与
    boolean d = zszxz1 && zszxz2;
    // 短路或
    boolean g = zszxz1 || zszxz2;

    System.out.println("false取非 :"+a);//true
    System.out.println("false与true :"+b);//false
    System.out.println("false或tre :"+c);//true
    System.out.println("false短路与true :"+d);//false
    System.out.println("false短路或true :"+g);//true



}

七 三元运算符

三項演算子、3つの式(ブール値1エクスプレス?:値2に接続された手段 ) 二つのシンボルの操作を見ることができる、
ブールエクスプレス発現値が真である場合、演算の最終結果は、ブール値であり、その後、全体最終結果は、そうでない場合は最終的な結果が値2である、表現値1であり、人気のあるものはこれです:私は(ブール-Expressは偽である)場合、少しの友人は知りませんでしたされ、ほとんどの友人古い今日お聞きし、私が撮りました(値2)を食べるように自分の子供たちに到達するために子どもたちの目の前に大きなロリポップああ顕彰など、安価なああ感の良い、少し友人は答えを知っていれば(ブール-Expressが真である)、およびデジタルの年齢を考えると、私はブール式の結果に基づいて、2つの選択肢の結果与えられた、ある;場合の背面と、この研究を- else文は同じ結果であり、初心者には印象を残すロリポップ少し友人(値1)を得ます。

public static void main(String[] args) {

        // 3 是否大于是 ,是返回 5否则返回6
        int i = 3 > 4 ? 5 : 6;
        System.out.println(i);// 6
        // 2 左移3位后是否大于7,是返回2.0,否则返回1.0
        double d = (2 << 3) > 7 ? 2.0 : 1.0;
        System.out.println(d);//2.0
        // 0b0001000 或上 0b01010101 是否大于100,是返回 0b10001000 否则返回0b1
        byte b = (0b0001000 | 0b01010101) > 100 ? 0b10001000 : 0b1;
        System.out.println(b);// 1

    }

八つオブジェクトタイプを決定します

記事が言及する前に、各オブジェクトは、オブジェクトが使用する必要があるタイプに属するかを決定する方法の種類、持っているinstanceof、キーワードをここにルックスの初心者ので、以降の記事では、このキーワードの特定の役割を理解します[ - >場所- >関係- >ロジック- >割り当て数]、優先順位の使用中にミスを避けるために使用括弧に推奨される演算記号の優先順位についてのおおよそです;クラスの継承をするときに使用されます

おすすめ

転載: www.cnblogs.com/zszxz/p/12058047.html