演算子

演算子は、ANSI Cと同じ算術演算子、論理演算子、比較演算子、ビット演算子をサポートします。次のセクションは4種類の演算子とその用法を示します。

算術演算子

演算子 目的
*
乗算
/
除算
%
剰余(余り)
+
加算
-
減算
^
指数
下記noteを参照

Note:デフォルトで、Origin Cは、指数演算子としてキャレット(^)を扱います。これはLabTalkと一貫性を持つために行われています。ANSI Cでは、キャレット(^)を排他論理和演算子(OR)として使います。コードの前に特別なpragmaステートメントを使って強制的にOrigin Cがキャレット(^)を排他論理和演算子(OR)として使うようにすることができます。

out_int("10 raised to the 3rd is ", 10^3);
#pragma xor(push, FALSE)
out_int("10 XOR 3 is ", 10^3);
#pragma xor(pop) // xorの動作をデフォルトに戻す

整数を別の整数で除算すると整数の結果となります。 以下のpragmaステートメントをコード前に使用して、Origin Cコンパイラがすべての数値定数をdoubleとして扱うようにできます。

out_double("3/2 is ", 3/2); // 1が出力

#pragma numlittype(push, TRUE)
out_double("3/2 is ", 3/2); // 1.5が出力
#pragma numlittype(pop) // numlittypeのデフォルトに戻す

剰余演算子は、左オペランドを右オペランドで割った余りを計算します。 この演算子は整数のオペランドにのみ適用します。

out_int("The remainder of 11 divided by 2 is ", 11 % 2);

比較演算子

比較演算子は、TrueまたはFalseを評価し、Trueは1、Falseは0を返します。

演算子 目的
>
より大きい
>=
以上
<
より小さい
<=
以下
==
等しい
!=
等しくない


if( aa >= 0 )
    out_str("aa is greater than or equal to zero");

if( 12 == aa )
    out_str("aa is equal to twelve");
	
if( aa < 99 )
    out_str("aa is less than 99");

論理演算子

論理演算子は、TrueまたはFalseを評価し、Trueは1、Falseは0を返します。 オペランドは左から右へ評価されます。 論理式全体が決まったら評価が終わります。

演算子 目的
!
NOT
&&
AND
||
OR

次の2つのサンプルを考えます。

expr1A && expr2
expr1B || expr2

expr1AがFalseまたはexpr1BがTrueとして評価されると、expr2は評価されません。 この動作は、プログラマにはメリットであり、効率的なコードを記述できます。 次は、順序の重要性を明確に表したものです。

if( NULL != ptr && ptr->dataValue < upperLimit )
    process_data(ptr);

上記の例で、ptrがNULLに等しいと、if式全体はFalseに評価されます。 ptrがNULLの場合、NULLポインタからdataValueメンバーを読み取ると、アプリケーションが直ちに終了するので、dataValueがupperLimitと比較されないことが重要です。

ビット演算子

ビット演算子は個々のビットをテストし、設定します。 演算子は、オペランドをビットの配列として扱います。 ビット演算子のオペランドは不可欠なタイプでなければなりません。

演算子 目的
~
補数
<<
左にシフト
>>
右にシフト
&
AND
^
排他論理和(XOR)
下記Noteを参照
|
論理和 OR

Note:デフォルトで、Origin Cは、指数演算子としてキャレット(^)を扱います。これはLabTalkと一貫性を持つために行われています。ANSI Cでは、キャレット(^)を排他論理和演算子(OR)として使います。コードの前に特別なpragmaステートメントを使って強制的にOrigin Cがキャレット(^)を排他論理和演算子(OR)として使うようにすることができます。

out_int("10 raised to the 3rd is ", 10^3);
#pragma xor(push, FALSE)
out_int("10 XOR 3 is ", 10^3);
#pragma xor(pop)