Java を理解する: データ型、変数、および演算子

皆さん、こんにちは。この記事では、Java のデータ型、変数、および演算子について説明します。

データ型と変数

データの種類

Javaではデータ型を基本データ型と参照データ型に分けますが、今日は基本データ型を中心に説明します。

基本的なデータ型は、整数型、浮動小数点型、文字型、ブール型に分けられます.次の表を見てみましょう.
ここに画像の説明を挿入

整数型

バイト型

バイト型のサイズは 1 バイトで、表現できる範囲は -128 ~ 127 です. この範囲を知るためにコードを使用できます.

System.out.println(Byte.MIN_VALUE);
System.out.println(Byte.MAX_VALUE);

ここに画像の説明を挿入

ここで Byte は byte 型のラッパー クラスですが、このように使用できることがわかっている場合は、ここで詳しく調べる必要はありません。

ショートタイプ

short 型のサイズは 2 バイトで、-2^15 ~ 2^15-1、つまり -32768 ~ 32767 を表すことができます。

System.out.println(Short.MIN_VALUE);
System.out.println(Short.MAX_VALUE);

ここに画像の説明を挿入

int型

int 型のサイズは 4 バイトで、
-2^31 ~ 2^31-1、-2147483648 ~ 2147483647 の範囲の数値を表すことができます。

System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.MAX_VALUE);

ここに画像の説明を挿入

ロングタイプ

long 型のサイズは 8 バイトで、
-2^63 ~ 2^62-1、-9223372036854775808 ~ 9223372036854775807 の範囲の数値を表すことができます。

System.out.println(Long.MIN_VALUE);
        System.out.println(Long.MAX_VALUE);

ここに画像の説明を挿入

ここで質問されるかもしれませんが、誰もが C 言語を習得しているのに、long long 型がないのはなぜですか? また、C 言語では、int 型のサイズが 4 バイトの場合と 8 バイトの場合があるのはなぜですか。Javaのint型は何バイトですか?

Java の long 型は 8 バイトであり、Java の int 型は常に 4 バイトであるため、Java には long long 型はありません。一方が 4 バイトになり、もう一方が 8 バイトになるようには見えません。

浮動小数点

Javaの浮動小数点型はC言語の浮動小数点型と同じで、浮動小数点型はfloat型とdouble型に分けられ、float型のサイズは4バイト、double型のサイズはtype は 8 バイトです. type にも表現の幅がありますが、一般的には気にしません。

キャラクタータイプ

Java の文字型 char は C 言語の char 型とは大きく異なります。C 言語では char 型のサイズが 1 バイトであるのに対し、Java では char 型のサイズは 2 バイトであり、中国語の文字も 2 バイトであるためです。つまり、Java では char を使用して中国語の文字を格納できます。例えば:

char c = '好';

char 型で表される範囲は 0 ~ 65535 ですが、なぜ -32768 ~ 32767 ではないのでしょうか。Java では漢字を表すために Unicode エンコーディングが使用されているためです。
コードで見てみましょう

System.out.println(Character.MIN_VALUE);
System.out.println(Character.MAX_VALUE);

ここに画像の説明を挿入

ブール型

Boolean 型のサイズは不定であり、彼が表す範囲は false と true のみです。

変数

変数とは
変数とは、Java プログラムで頻繁に変更できる量を指し、これらの変数はデータ型で定義されます。

変数を定義する形式は次のとおりです。 データ型 変数名 = 初期値

変数を定義するときは、変数の値がデータ型で表現できる範囲を超えないように注意する必要があります (例: バイト a = 128; これが機能しない場合、コンパイラはエラーを報告します)。

変数を定義するときに注意する必要があるのは、long integer 型と float 型を定義するときに、それらを少し変更できることです。long b = 100L、int 型と long 型を区別するために数値の後に l または L を追加します。float c = 1.0f、float 型データを定義するとき、数値の後に f または F を追加する必要があります。 data は double 型と見なされ、コンパイラはエラーを報告します。

浮動小数点変数とブール変数に注目しましょう。

浮動小数点変数

int a = 3;
int b = 2;
System.out.println(a/b);

このコードの出力は何ですか? 1.5? Java 言語と C 言語の両方でこの効果を見てみましょう
ここに画像の説明を挿入
。つまり、/ の両側の数値が整数である場合、結果も整数である必要があり、その結果が割り切れる結果である場合、取得したい1.5 どうすればいいの?浮動小数点数間の除算に変換する必要があります。

double a = 30;
double b = 2.0;
System.out.println(a/b);

ここに画像の説明を挿入

double a = 3.0;
int b = 2;
System.out.println(a/b);

ここに画像の説明を挿入
計算時にint型が自動的にdouble型に変換されるので、このように1.5と書くことも可能です。

ブール変数

ブール変数には false と true の 2 つの値しかなく、Java と C 言語では異なります。C 言語では次のように記述できます。

int i = 10;
while(i)
{
    
    
    System.out.println("我好帅");
    i--;
}

Java では、いわゆる 0 が false であり、ゼロ以外が true ではないため、Java でこれを記述するとエラーが報告されます。Java では、true は true を表すためにのみ使用でき、false は false を表すためにのみ使用できます。 . 次のようにしか書けません:

int i = 10;
while(i>0)
{
    
    
    System.out.println("我好帅");
    i--;
}

型変換

タイプは常に同じとは限りません。たとえば、次のように変更されます。

int a = 10;
Long b = 0L;
b = a;

暗黙の変換

ここで、b は long 型の変数であるため、a は自動的に long 型に変換されます. long 型の変数は int 型の変数よりも大きいため、a は自動的に long 型に変換されてから a に代入されます.変換は暗黙の変換と呼ばれ、別の暗黙の変換があります。

Byte a = 10;
Byte b = 20;
Byte c = 0;
c = a+b;

このコードの場合、コンパイラはエラーを報告します。コンパイラには、計算中に 4 バイト未満のデータを 4 バイトのデータにアップグレードするという原則があるためです。つまり、a と b が最初に発生します。整数型を昇格させて計算を行い、次に int 型の値を byte 型の変数に代入するとエラーになるので、この暗黙の変換には注意が必要です。

明示的な変換


明示的な変換とは、たとえば (int) 13.14 などの形式 (型) でデータを渡すことを意味します。ここでは、13.14 必須型を int 型に変換します。必須型変換のプロセス中にデータが失われる可能性があります小数点が失われます。

すべての必須の型変換が成功するわけではなく、異なる型間で型変換を行うことはできません。次に例を示します。

boolean a = false;
int b = (int)a;

この種のコンパイラはエラーを報告し、型変換は失敗します。

オペレーター

算術演算子

算術演算子は実際には非常に単純です。ここでは + - * / あまり紹介しません。Java では、% のオブジェクトは浮動小数点数にすることができます。例えば:

double a = 6.5%3;

結果は0.5

インクリメント演算子

+= -= *= /= %=
インクリメンタル演算子は、実際には省略形と同等です。たとえば、a+=2; は a = a+2 と同等です; 他のインクリメンタル演算子は同じですが、インクリメンタル演算子は私たちに注意する必要があります。インクリメント演算子を使用する場合、暗黙的な変換は発生しません。次に例を示します。

Byte a = 10;
Byte b = 20;
a+=b;

このコードはエラーを報告しません。

インクリメント/デクリメント演算子

++   -- 
int a = 1;
int b = a++;
int c = 1;
int d = c+1;

このコードを実行すると、b と d の値、a と c の値がすべて異なります.ここで a++ は接尾辞 ++ であるため、a の値は最初に b に割り当てられ、次に ++ が割り当てられます、 a 値自体も ++ ですが、d は c+1 の後の値であり、c の値は 1 のままです。これは、自己インクリメントまたは自己デクリメントの副作用であり、使用する際には注意が必要です。

ポスト ++, – はプリ ++, – とは異なり、プリ ++, – は最初に +1 または -1 を実行してから値を代入しますが、ポスト ++, – は値を代入します最初に + 1 または -1。

関係演算子 (比較的単純ですが、あまり説明しません)

== > < >= <= !=, == = は書かないでください。

論理演算子

&& ||

&&

論理的で、&& の両側が true の場合、結果は true になり、それ以外の場合は false になります。

int x = 1;
if(x == 2 && 1/0 == 0) {
    
    
    System.out.println("ok");
}else {
    
    
    System.out.println(no);
}

ここに画像の説明を挿入

&& の左側の式が false の場合、右側の式は実行されないため、このコードを実行してもエラーは発生しません。

||

|| の両側の式のいずれかが true の場合、結果は true です。同様に、|| の左側の式が true の場合、右側の式は実行されません。

論理否定とは、式が真の場合、論理否定の結果が偽になり、式が偽の場合、論理否定の結果が真になることを意味します。

ビット演算子

& Bitwise AND
| Bitwise OR
^ Bitwise XOR
~ Bitwise Negative
ビット演算子は、数値の 2 の補数形式を操作します。

& ビットごとの AND 演算子

対応するバイナリ値がすべて 1 の場合のみ 1、それ以外の場合は 0 です。例: 15&20、2 進数に変換された 15 は 1111、20 は 2 進数 10100 に変換され、
ビットごとの AND 演算が実行され、
0 1 1 1 1 0
1 0 0 0 0
1 0 0
は 4 になります。

| ビットごとの OR 演算子

対応する 2 つのバイナリ ビットのうちの 1 つは 1 です。
15 | 20
0 1 1 1 1
1 0 1 0
0 1 1 1 1 1
は 31

^ ビットごとの XOR 演算子

2 つの対応する 2 進数は 1 と同じではなく、0
15 ^ 20
0 1 1 1 1 1 0 1
0 0
1 1 0 1 1
結果は 27

~ ビットごとの反転

バイナリ ビットが 0 の場合は 1 に、1 の場合は 0 にします。
15
1 1 1 1
0 0 0 0
は 0 になります。

シフト演算子

"<<" 2 進ビット左シフト
">>" 2 進ビット右シフト
">>>" 符号なし右
シフト シフト演算子の演算対象は、数値の 2 進補数形式でもあります

<< 左シフト演算子

左に1
ビット2 進シフト、

に 0 を補数 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 結果は 30 です。左シフト演算子は 2^i 倍されていると言えますが、i は
シフト数です。

>> 右シフト演算子

バイナリ ビットは右に 1 ビット シフトされ、符号ビットは左で補数され、負の数の場合は 1 が補数され、整数の場合は 0 が補数されます 15>>1 0 0 0 0 0 0 0 0 0 0 0
0
0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 結果は 7 です

-15
元のコード: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 逆コード: 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 の補数: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 0 0 0 1
-15>>1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 次に、このバイナリを元のコードに変換します
。結果は -7 です。
">>" 右シフト演算子は、2^i で除算することと同じです。

>>> 符号なし右シフト

符号なし右シフトの左辺は必ず 0 で埋められるので、ここではあまり紹介しません。

おすすめ

転載: blog.csdn.net/m0_73888323/article/details/130117926