皆さん、こんにちは。この記事では、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 = 3。0;
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 で埋められるので、ここではあまり紹介しません。