演算子 (C# と Java の比較)

更新 : 2007 年 11 月

C# には、Java でサポートされている、適用可能なすべての演算子が用意されています。これらの演算子の一覧を以下に表に示します。表の最後に、C# で使用でき、Java で使用できない新しい演算子を示します。

カテゴリ

記号

単項演算

++--+-!~()

乗法演算

*/%

加法演算

+ -

シフト

<< >>

関係演算

< > <= >= instanceof

等値演算

== !=

論理 AND

&

論理 XOR

^

論理 OR

|

条件 AND

&&

条件 OR

||

条件

? :

代入

= *= /= %= += -= <<= >>= &= ^= |=

オペランドの型

typeof

オペランドのサイズ

sizeof

オーバーフロー チェックの適用

checked

オーバーフロー チェックの中止

unchecked

Java の演算子の中で C# で使用できないのは、シフト演算子 (>>>) だけです。この演算子が Java に存在するのは、Java には符号なし変数がないためであり、最上位ビットに 1 を挿入するために右シフトが必要な場合に対応するためです。

C# は、符号なし変数をサポートするため、標準の >> 演算子しか必要としません。この演算子の結果は、オペランドが符号付きであるか、符号なしかによって異なります。符号なし数値を右シフトすると最上位ビットに 0 (ゼロ) が挿入され、符号付き数値を右シフトすると、直前の最上位ビットがコピーされます。

checked 演算子と unchecked 演算子

算術演算の結果が、使用中のデータ型に割り当てられているビット数に対して大きすぎるとオーバーフローが発生します。このようなオーバーフローは、特定の整数算術演算で checked キーワードや unchecked キーワードを使用することによってチェックしたり、無視したりできます。式が、checked を使用している定数式である場合は、コンパイル時にエラーが生成されます。

これらの演算子の使い方を示す簡単な例を次のコードに示します。

class TestCheckedAndUnchecked
{
    static void Main()
    {
        short a = 10000;
        short b = 10000;

        short c = (short)(a * b);                     // unchecked by default
        short d = unchecked((short)(10000 * 10000));  // unchecked
        short e = checked((short)(a * b));            // checked - run-time error

        System.Console.WriteLine(10000 * 10000);  // 100000000
        System.Console.WriteLine(c);              // -7936
        System.Console.WriteLine(d);              // -7936
        System.Console.WriteLine(e);              // no result
    }    
}

このコードでは、unchecked 演算子を使用することで、本来ならば次のステートメントによって生成されるコンパイル時のエラーが回避されます。

short d = unchecked((short)(10000 * 10000));  // unchecked

次の式は既定で unchecked となるので、値が通知なしでオーバーフローします。

short c = (short)(a * b);                     // unchecked by default

checked 演算子を使用することにより、実行時に式に対してオーバーフロー チェックを適用できます。

short e = checked((short)(a * b));            // checked - run-time error

最初の 2 つの値を d と c に割り当てると、プログラムの実行時に -7936 の値が通知なしでオーバーフローしますが、checked() を使用して e の値を乗算しようとすると、プログラムは OverflowException をスローします。

ms228601.alert_note(ja-jp,VS.90).gifメモ :

コードのブロックで算術オーバーフローをチェックするかどうかは、コマンド ライン コンパイラ スイッチ (/checked) を使用して制御することも、Visual Studio でプロジェクトごとに直接制御することもできます。

参照

概念

C# プログラミング ガイド

参照

C# の演算子

その他の技術情報

Java 開発者のための C# プログラミング言語