#java と c の構文の違いは何ですか?
1. 識別子:
C 使用可能な識別子は数字、大文字と小文字、アンダースコアであり、数字で始めることはできません。[推奨チュートリアル] : C 言語チュートリアル ]
C で使用できる 3 種類の識別子に加えて、Java にはもう 1 つドル記号 ($) がありますが、これも数字で始めることはできません。 [推奨学習: java コース ]
2. キーワード:
C のキーワード:
自動ブレーク case case char const
Continue デフォルト do double else
enum extern float for goto
if int long register return
静的構造体の short signed size
switch typedef Union unsigned void
volatile while
Java のキーワードは次のとおりです:
abstract boolean Break byte case
catch char クラスはデフォルトを続行します
do double else extends false
##finalfinally float for ifimplements import instanceof int インターフェイスlong ネイティブ new null packageprivate protected public return shortこれは一時的な true をスローしますtry static super switch synchronizedvoid volatile while
3. データ型:
C のデータ型は次のとおりです:int: 2 バイト
short: 2 バイト long: 4 バイト char: 1 バイト float: 4 バイトdouble: 8 バイト long double: 16 バイト char 型を除き、上記の格納はシステムによって多少異なりますが、低精度の桁数が高精度を超えることはありません。Java のデータ型:
Composite type: class、interface、array
byte: 1 byte
short: 2 バイト int: 4 バイト long: 8 バイト char: 2 バイト (Unicode エンコード) float: 4 バイト double: 8 バイト 上記のデータ型に対応する記憶域はプラットフォームとは関係がなく、この値に固定されます。 4. 定数と変数
1) 定数
Java と C の整数定数の定義は、次の点を除いて同じです。長整数データ 最後に l または L を付加する以外の型は数値を直接表示します。 C の符号なし定数の前には u または U が付きます。基数が異なる場合、10 進数は最上位ビットに 0 を含めることができないことを直接表示し、8 進数は 0 で始まり、16 進数は 0x または 0X で始まります。 浮動小数点型の場合、C と Java はどちらも 10 進数表現のみを使用できます。小数形式と指数形式が使用でき、指数形式で表現する場合は小数と指数をeまたはEで区切ります。 Java では区別するために、単精度の後に f または F が必要であり、倍精度の後に d または D が必要であることに注意してください。 文字定数は、単一の文字、または一重引用符で囲まれたエスケープ文字列で表されます。 C の文字型は 0 から 255 までの ASCII コードの文字のみを表現できるという事実に特別な注意を払う必要があります。Java では、Unicode エンコードの 2 バイト記憶ユニットを使用して特殊文字を表現できます。Unicode エンコードを表現する場合、 \u に加えて 4 桁の 16 進文字列が使用されます。ブール型は Java でのみ使用できるため、特別な注意が必要です。
Java の定数はキーワード Final で変更されますが、このキーワードは一度割り当てられると変更できません。C では、変更できないキーワードは const であり、それによって変更される変数です (これは変数であり、変数であることに注意してください)定数) は定義時に初期値を代入する必要があります。また、#define で定義されたマクロ定数には型がありません。
2) 変数
Java と C の変数の定義は基本的に同じです。つまり、
数据类型变量名[ = 变量初值];
変数には初期値を割り当てることも、割り当てないこともできますが、 Java では長整数と対応する識別記号 (l、f など) を浮動小数点数の後に追加する必要があります。
特記事項: コンパイラが異なるため、C 宣言変数は実行可能ステートメントの前に配置する必要があります。そうしないと、コンパイル エラーが発生する可能性があります。
5. 論理演算子とビット演算子
論理演算子 &&
, ||
, !
3 種類あり、意味は同じですが、C では演算結果が 0 または 0 以外であるのに対し、Java では true または false のみである点が異なります。 Javaには&、|、^(XOR)もありますが、&と&&、|、||の違いは前者が非ショートカット演算子、後者がショートカット演算子、つまり判定が先に行われる点です。 && 以降、&& 前が false の場合は判定なし、以降の判定は || の前後両方で判定、前が || の場合は以降の判定は行わない。 ^ は両方が同じで false であることを意味します。
C および Java で使用できるビット演算子は次のとおりです: &
、|
、^
、~ (逆)
, << (左シフト)
, >> (右シフト)
, 意味は基本的に同じです。 C での負の数の右シフト演算はシステムによって異なります (算術右シフトまたは論理右シフトの場合があります) が、Java では、>> は算術右シフトを表します。つまり、最上位ビットは符号ビットで埋められます。 Java の論理右シフト (符号なし右シフト) 演算子は >>> で、2 の補数の右シフトを使用し、上位ビットに 0 を加算します。
PS: 注意深い読者は、-10 などの byte 型または short 型の負の数を定義した場合、符号なし右シフトの >>> メソッドを使用した後の出力結果は - 5 であることに気づくかもしれません。 . 上記によると、上位に 0 を加えると正の数になるはずです。 int型やlong型では負の数にならないのですがなぜでしょうか?これは、Java が >>> 操作を実行するときに使用する最も低いデータ型が int 型であるため、上位データがすべて 1 になるためだと思います (コンピュータに格納されるデータは 2 の補数で格納されるため、 negative byte または short 型は int 型に変換され、上位ビットは 1 で埋められます。シフトの際、上位ビットの最後の 1 は下位ビットの最初のビットに移動され、次にインターセプトされてデータ型になります。 (バイトまたはショート) 定義されているため、表示される数値は依然として負の数値です。ここから、byte 型や short 型のデータに対して > 演算を実行すると、必要な値が得られない可能性があることがわかりますので、注意してください。
6. 配列
C での配列の定義は次のとおりです:
类型说明符数组名[常量表达式];
定義は、配列と同時に実行できます。 int a[ 10] = {0,1,2,3,4,5,6,7,8,9};
括弧内の定数は省略できます。
Java で配列を定義するには 2 つの方法があります:
数据类型数组名[]; //或 数据类型 []数组名;
次のように定義と初期化を同時に行うことができます: int []a = {0,1, 2,3,4, 5,6,7,8,9};
注: Java の配列が定義時に初期化されていない場合は、初期化時に最初にメモリを割り当てる必要があります。つまり:
数组名 = new 数据类型[常量表达式];
定義と同時にメモリを割り当てることもできます:
数据类型数组名[] = new 数据类型[常量表达式];
C も Java も可変長配列をサポートしておらず、可変長配列は 配列名 [添え字] です。 ]
参照される場合。違いは次のとおりです:
Java の添字の範囲は 0~配列の長さ-1 です。この範囲内にない場合は、配列の添字範囲外の例外がスローされ、有効なC の範囲も 0~配列長-1 ですが、添え字がこの制限を超えてもエラーは報告されません。
多次元配列では、配列要素が行に配置されます。
もう 1 つ注意すべき点: C で初期化せずに配列を定義した場合、配列要素の値は予測できませんが、Java では、初期化せずにメモリが割り当てられると、配列にはデフォルト値が設定されます。価値。
7. ステートメント
C ステートメントと Java ステートメントには、主に次のような大きな違いはありません:
1) メソッドを呼び出すときは C を直接呼び出します。 /functions 関数を呼び出すとき、Java でメソッドを呼び出すときは、メソッド名の前にオブジェクト名を追加する必要があります。
2) C では、2 つのネストされた複合ステートメントで同じ名前の変数を同時に定義できますが、Java では定義できません。
以上がJavaとCの構文の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。