変数、演算子

1.1 変数の概要

以前に定数について学習しましたが、今度は変数について学習する必要があります。Java における変数の適用は、定数の適用をはるかに超えています。したがって、変数も特に重要な知識ポイントです。

変数とは何ですか? 変数とはメモリ上の小さな箱(小さなコンテナ)のことですが、コンテナとは何でしょうか?また、水の入ったコップは水を入れる容器、家の大きなタンスは衣類を入れる容器、お弁当箱は食べ物を入れる容器など、生活の中にはたくさんの容器があります。それでは、変数は何をロードするのでしょうか? 答えはデータです!結論: 変数はデータを保持するメモリ内の小さなボックスであり、データの保存と取得にのみ使用できます。* *

1.2変数の定義(変数の作成)

変数を定義するための構文:

  
          数据类型  变量名  =  数据值;
          如:int     a    =  100;

データ型すべての変数は、その変数の型を指定する必要があります。Java は厳密に型指定された言語であり、さまざまなデータ型がさまざまな方法でメモリに格納されます。したがって、コンテンツを保存する前にデータ型を指定する必要があります。

変数名は、識別子を使用して変数に名前を付け、計算時にこの名前を使用して計算に参加します。この名前は、値を保存するためのスペースを表します。

「=」記号ここでの「=」記号は一種の演算子です。つまり、= は代入演算を表し、数学的な意味での等価ではありません。

値は実際の変数に格納されている値であり、変数のデータ型と一致している必要があります。

最も一般的に使用される 4 つのデータ型は次のとおりです。

整数

double小数

文字

文字列文字列

1.3変数使用時の注意事項

変数を使用する際の注意点は、変数の使用規則を満たしている場合のみ使用することができるため、注意点を見てみましょう。

変数を定義した後は、値を代入する必要はありません。その後、変数を使用するときに値を代入します。割り当てなしでは使用できません

  
  public static void main(String[] args) {
      int x;
      x = 20; //为x赋值20
      System.out.println(x);//读取x变量中的值,再打印
  }

変数の範囲は限られています。

  
  public static void main(String[] args) {
      int x = 20;
      {
          int y = 20;
      }
      System.out.println(x);//读取x变量中的值,再打印
      System.out.println(y);//读取y变量中的值失败,失败原因,找不到y变量,因为超出了y变量作用范围,所以    不能使用y变量
  }

変数は繰り返し定義できません。

  
  public static void main(String[] args){
        int x = 10;
        double x = 5.5;//编译失败,变量重复定义
  }

1.4コンピュータストレージユニット

変数は、データを保存するメモリ内の小さなコンテナです。では、コンピュータのメモリはどのようにしてデータを保存するのでしょうか? メモリであろうとハードディスクであろうと、コンピュータ記憶装置の最小の情報単位は「ビット」と呼ばれ、通常は小文字の b で表され、「ビット」とも呼ばれます。コンピュータの基本的な記憶単位は「バイト(バイト)」と呼ばれ、通常は大文字のBで表され、1バイトは連続する8ビットで構成されます。

プログラムが記憶領域を使用する必要がある場合、オペレーティング システムは 1 ビットではなく少なくとも 1 バイトをプログラムに割り当てます。プログラムが 1 ビットのスペースしか必要としない場合、システムは 1 ビットしか割り当てられないのではないか、と思われるかもしれません。答えはいいえだ!タバコが1本あればいいのに、タバコを買いに店に行くようなものですが、お店が割り振る最小単位は1箱(20本)で、1本売ることは不可能です。

1 バイト (8 ビット) に大きな値を格納できると思われるかもしれませんが、1 ビットの最大値は 9 なので、8 ビットの最大値は 99999999 になります。あなたは間違っています。コンピューターは、私たちの生活でよく使われる 10 進法ではなく、ストレージに 2 を使用するからです。したがって、1 バイトに格納される最大データは 2 進数の 11111111 です。

バイトに加えて、よく知られている一般的に使用されるストレージ単位がいくつかあります。

1B(バイト)=8ビット

1KB = 1024B

1MB = 1024KB

1GB = 1024MB

1TB = 1024GB

1PB = 1024TB

1.4 4つのカテゴリーと8種類の基本タイプ

大きなワードローブは水を入れるのに使用できませんし、水グラスは衣類を入れるのに使用できません。これは、異なるコンテナには異なるアイテムが入っていることを意味します。変数についても同様で、変数を作成する際には、整数変数、浮動小数点変数など、変数のデータ型を指定する必要があります。結論: 変数には、どのタイプの変数がどのタイプのデータをロードするかという明確なタイプが必要です。

Javaには基本型が4種類あり、この4種類を拡張すると合計8種類の基本型があります。今後プログラムを書く際には4種類ではなく、この基本8種類を使用することになりますが、この基本8種類で範囲を指定します。Java のデフォルトの型: 整数型はint、浮動小数点型は ですdouble

第2章 データ型変換

Java プログラムで計算に参加するために必要なデータは、データ型の一貫性が保証されている必要があり、データ型が一致していない場合、型変換が発生します。

2.1 自動変換

int型変数に型変数byteを追加すると、結果はどのようなデータ型になりますか?

  
  int i = 1; 
  byte b = 2; 

演算の結果、変数の型がint型になるというデータ型の自動型変換現象です。

  • auto-convert :取值范围小的类型に自動昇格します取值范围大的类型

  
  public static void main(String[] args) {
      int i = 1;
      byte b = 2;
      // byte x = b + i; // 报错
      //int类型和byte类型运算,结果是int类型
      int j = b + i;
      System.out.println(j);
  }
  ​

変換原理図

byte型メモリは 1 バイトを占有し、型を操作するときに型intに昇格し、自動的に 3 バイトが追加されるため、計算結果は型のままになります。intint

 

同様に、int型変数がdouble変数で演算されると、その型は自動的に演算対象の型intに昇格されます。double

  
  public static void main(String[] args) {
      int i = 1;
      double d = 2.5;
      //int类型和double类型运算,结果是double类型
      //int类型会提升为double类型
      double e = d+i;
      System.out.println(e);
  }

変換ルール

範囲の狭いタイプは範囲の広いタイプに昇格され、byte、short、char動作中に直接昇格されますint

  
  byte、short、char-->int-->long-->float-->double

2.2 強制変換

1.5型の変数に値を代入するintどうなりますか? コンパイルが失敗した場合は、値を割り当てることができません。

  
  int i = 1.5; // 错误

double型メモリ用に 8 バイト、int型メモリ用に 4 バイト。1.5はいdoubleタイプです。値の範囲は より大きくなりますintdouble8リットルのやかんとint4リットルのやかんであることがわかりますが、大きなやかんの水を小さなやかんに直接入れることはできません。

double代入を成功させたい場合は、必須の型変換を通じて型を 型に変換することによってintのみ値を割り当てることができます。

  • キャスト:取值范围大的类型キャストを に変換します取值范围小的类型

比較すると、自動変換は Java によって自動的に実行されますが、必須変換は手動で実行する必要があります。

変換形式:

  
  数据类型 变量名 = (数据类型)被转数据值;

タイプ1.5割り当てると、コードは次のように変更されます。int

  
  // double类型数据强制转成int类型,直接去掉小数点。
  int i = (int)1.5;

同様に、short型が1追加されると、その型が昇格されることがわかりますが、結果を short 型の変数に代入したい場合は、キャストする必要があります。

  
  public static void main(String[] args) {
       //short类型变量,内存中2个字节
       short s = 1;
       /*
         出现编译失败
         s和1做运算的时候,1是int类型,s会被提升为int类型
         s+1后的结果是int类型,将结果在赋值会short类型时发生错误
         short内存2个字节,int类型4个字节
         必须将int强制转成short才能完成赋值
       */
       s = s + 1;//编译失败
       s = (short)(s+1);//编译成功
  }

変換原理図

 

 

強い注意力

  • 浮動小数点を整数に変換する場合、小数点を直接キャンセルすると、データの精度が失われる可能性があります。

  • intshort2バイトを切り捨てるような強制変換を行うと、データが失われる可能性があります。

  
  // 定义s为short范围内最大值
  short s = 32767;
  // 运算后,强制转换,砍掉2个字节后会出现不确定的结果
  s = (short)(s + 10);

2.3 ASCIIコード一覧

  
  public static void main(String[] args) {
    //字符类型变量
    char c = 'a';
    int i = 1;
    //字符类型和int类型计算
    System.out.println(c+i);//输出结果是98
  }

コンピュータの内部にはすべて 2 進数の 0、1 のデータがありますが、人間の文字の問題をコンピュータに直接認識させるにはどうすればよいでしょうか? コーディングリストの概念を作成したところです。

  • エンコードテーブル: 人間の文字と10進数を対応させてテーブルを作成するものです。

    人々は次のように規定します。

    キャラクター 価値
    0 48
    9 57
    65
    Z 90
    ある 97
    z 122
    • すべての英語の文字、数字、記号を 10 進法に対応させ、世界初のコード表 ASCII (

    情報交換のための米国標準規定) 情報交換のための米国標準規定)。

チップ:

char型とint型の計算処理では、char型の文字はまずエンコーディングテーブルを参照して97を求め、それを1で合計すると98となります。char 型は int 型に昇格されます。char型メモリは2バイト、int型メモリは4バイトです。

2.4 定数と変数の演算

以下のプログラムに問題はありますか?

  
  public static void main(String[] args){
    byte b1=1;
    byte b2=2;
    byte b3=1 + 2;
    byte b4=b1 + b2;
    System.out.println(b3);
    System.out.println(b4);
  }

解析:b3 = 1 + 21、 は定数で固定データですが、コンパイル時(コンパイラjavac)では、の結果はバイト型の値の範囲を超えず、変数に代入できると2判断されていますので、正解です。1+2b3b3=1 + 2

逆に、b4 = b1 + b2b2`b1 和は変数なので変数の値は変わる可能性がありますが、コンパイラjavacはコンパイル時にb1+b2の結果がどうなるか分からないので、結果をint型として処理しますので、 int 型を byte 型に割り当てることはできないため、コンパイルは失敗します。

第3章 オペレーター

3.1 算術演算子

算術演算子には次のものがあります。 アルゴリズム 結果
+ 正の符号、プラス +3、2+3 3、5
+ 接続文字列 “中“+“国”+2020 中国 2020
- マイナス記号、マイナス -3、2-3 -3、-1
* 取る 2*3 6
/ 取り除く 5/2 2
% 取模 5%2 1
++ 自己増加 ++1,2++ 2,3
-- デクリメント --3,5-- 2,4
       

算術演算子を使用するときは、次の点に注意してください。

1. 加算演算子は文字列を連結する際に注意が必要で、文字列に直接加算した場合のみ文字列に変換されます。

2. 除算「/」は、両辺が整数の場合、整数部分を切り捨て、余りを四捨五入します。片側が浮動小数点の場合は、通常のルールに従って分割します。

3. 「%」は整数の除算と剰余を表す記号であり、小数の剰余は意味を持ちません。結果の符号は係数の符号と同じです。

4. 整数は被除数として使用されます。0 を除数として使用することはできません。そうでない場合は、エラーが報告されます。

Java では、整数は上記の演算子を使用しますが、どのように計算されても、小数点は得られません。

  
  public static void main(String[] args) {
      int i = 1234;
      System.out.println(i/1000*1000);//计算结果是1000
  }
  • ++ 演算により、変数自体が 1 ずつ増加します逆に、--運用時には変数自体が 1 減算され、使用法は と++一致します。

    • 独立した操作:

      • 変数が独立して操作される場合、前++と の間に違いはありません后++

      • 変数前++: 例++i:

      • 変数后++: 例i++:

    • 混合操作:

      • 他の変数と組み合わせて、違いを生み出します前++后++

      • 変数前++: 変数 a を 1 増加させ、1 を加算した結果を b に代入します。つまり、a が最初に計算されます。a と b の結果は両方とも 2 です。

        
        public static void main(String[] args) {
            int a = 1;
            int b = ++a;
            System.out.println(a);//计算结果是2
            System.out.println(b);//计算结果是2
        }
      • 変数后++: 変数 a は、まず変数 b に自身の値 1 を代入しますが、このとき変数 b の値は 1 となり、変数 a は自分自身に 1 を加えます。a の結果は 2 で、b の結果は 1 です。

        
        public static void main(String[] args) {
            int a = 1;
            int b = a++;
            System.out.println(a);//计算结果是2
            System.out.println(b);//计算结果是1
        }
  • +文字列内のシンボルの操作:

    • +シンボルが文字列に遭遇すると、それは接続と結合の意味を表します。

    • 「a」+「b」の結果は「ab」であり、接続の意味は

  
  public static void main(String[] args){
      System.out.println("5+5="+5+5);//输出5+5=55
  }

3.2 代入演算子

オペレーター アルゴリズム 結果
= 割り当て int a = 2 2
+= 事後追加割り当て int a=2,a+=2 4
-= 減算後の代入 int a=2,a-=2 0
*= 乗算後の代入 int a=2、a*=2 4
/= 割り算後の代入 int a=2,a/=2 1
%= 係数の後の代入 int a=2,a%=2 0
  • 代入演算子は、シンボルの右側の値を左側の変数に代入します。

  
  public static void main(String[] args){
      int i = 5;
      i+=5;//计算方式 i=i+5 变量i先加5,再赋值变量i
      System.out.println(i); //输出结果是10 
  }
  • += 記号の展開

以下のプログラムに問題はありますか?

  
  public static void main(String[] args){
    short s = 1;
    s+=1;
    System.out.println(s);
  }

分析:論理的には、計算結果をint型に昇格させた後、値の範囲が大きい型を値の小さい型に代入できないため、short型に値を代入するとエラーが発生すると考えられますs += 1s = s + 1範囲。ただしs=s+1进行两次运算+=は 1 回しか動作しない演算子であり、強制変換、つまり の特性があるためs += 1s = (short)(s + 1)プログラムは問題なくコンパイルおよび通過し、実行結果は 2 になります。

 

3.3 比較演算子

オペレーター アルゴリズム 結果
== に等しい 4==3 間違い
!= 等しくない 4!=3 真実
> 以上 4>3 真実
< 未満 4<3 間違い
<= 以下 4<=3 間違い
>= 以上 4>=3 真実
  • 比較演算子は 2 つのデータを比較する演算であり、演算の結果はブール値trueまたはですfalse

  
  public static void main(String[] args) {
      System.out.println(1==1);//true
      System.out.println(1<2);//true
      System.out.println(3>4);//false
      System.out.println(3<=4);//true
      System.out.println(3>=4);//false
      System.out.println(3!=4);//true
  }

3.4 論理演算子

論理演算子。ブール値に対する演算を実行するために使用され、演算の最終結果はブール値 true または false になります。

オペレーター アルゴリズム 結果
& そして 真偽 間違い
| または false|true 真実
^ XOR 偽^真 真実
いいえ !間違い 真実
&& との短絡 真偽 間違い
|| 短絡または false||true 真実
  
  public static void main(String[] args)  {
      System.out.println(true && true);//true
      System.out.println(true && false);//false
      System.out.println(false && true);//false,右边不计算
    
      System.out.println(false || false);//falase
      System.out.println(false || true);//true
      System.out.println(true || false);//true,右边不计算
    
      System.out.println(!false);//true
  }

3.5 ビット演算子

ビット単位の演算子には次のものがあります。  
<< 左に移動 左シフトは、すべてのビットを数ビット左に移動して 0 を埋めることです。
>>右に移動 右シフトは、すべてのビットを数ビット右に移動して最上位ビットを埋めることです

左に移動

12<<2 は、12 が 2 つ左に移動することを意味します

​ 12的二进制 0000 1100

​ 0000 1100 左移两位 后面补0 0011 00 00 48

​ 由此我们得出一个快速的算法 M << n 其实可以这么算 M << n = M * 2的n次方

​ 12<<2 = 12*2的2次方

​ 12<<3 = 12*2的3次方

右移

​ 12>>2 意思就是12向右移动两位

​ 0000 1100 右移两位 前面补最高位 0000 0011 3

​ 基本和左移一致 不同点在于正数和负数 负数补1 正数补0

​ -8>>2

1111 1000 右移两位补1 1111 1110 -2

​ 由此我们得出一个快速的算法 M >>n 其实可以这么算 M >>n = M /2的n次方

​ -8>>2 -8/2 的 2次方

​ -16>>3 -16/2的3次方

 

3.6 三元运算符

  • 三元运算符格式

  
   数据类型 变量名 = 条件表达式?表达式1:表达式2

表达式:通俗的说,即通过使用运算符将操作数联系起来的式子,例如:

3+2,使用算数运算符将操作数联系起来,这种情况,我们称为算数表达式。

3>2,使用比较运算符(也称为条件运算符)将操作数联系起来,这种情况,我们称为条件表达式。

其他表达式,不再一一举例。

运算规则

先判断条件表达式的值,若为true,运算结果为表达式1;若为false,运算结果为表达式2。

  
  public static void main(String[] args) {
      int a = 200;
      int b = 100;
      int max = (a>b ? a : b);//max赋值为 a,b中较大的值
      System.out.println(max);//200
      int min = (a<b ? a : b);//min赋值为 a,b中较小的值
      System.out.println(min);//100
  }

3.7 运算符优先级

在学习运算符的过程中,我们发现,当多个运算符一起使用的时候,容易出现不清晰先后运算顺序的问题,那么,在这里,我们来学习下,运算符之间的运算优先级。

​ 下图是每种运算符的优先级,按照运算先后顺序排序(优先级相同的情况下,按照从左到右的顺序依次运算)

 

课后练习

在控制台打印如下的信息

 

​ 要求:

​ 1.清单顶部为固定的数据,直接打印即可

​ 2.清单中部为商品,为变化的数据,需要记录水果信息后,打印

​ 3.清单底部包含了统计操作,需经过计算后,打印

おすすめ

転載: blog.csdn.net/qq_39918597/article/details/115999277