お久しぶりです!これまで説明してこなかったけれど、ここで Cherry Syn で使える演算子について整理しておきましょう。
| Cherry C 記述 | 演算 | 説明 | 結果のビット幅 |
|---|---|---|---|
| + | 加算 | 左右の項の和 | 左右の項の大きい方 |
| - | 減算 | 左項 − 右項 | 左右の項の大きい方 |
| * | 乗算 | 左右の項の積 | 左右のビット幅の合計 |
| >> | 右シフト | 左項を右項ビット分右にシフト | 左項のビット幅 |
| << | 左シフト | 左項を右項ビット分左にシフト | 左項のビット幅 |
| == | イコール | 左右の項が等価 | 1 |
| < | 小なり | 左項が右項より小さい | 1 |
| <= | 小なりイコール | 左項が右項と同じか、より小さい | 1 |
| && | 論理積 | 両方がゼロでなければ1、そうでなければ0 | 1 |
| || | 論理和 | どちらかがゼロでなければ1、そうでなければ0 | 1 |
| & | ビットAND | ビットごとの論理積 | 左右の項の大きい方 |
| | | ビットOR | ビットごとの論理和 | 左右の項の大きい方 |
| ^ | ビットXOR | ビットごとの排他的論理和 | 左右の項の大きい方 |
| @ | ビット連結 | 左右のビット列を連結 | 左右のビット幅の合計 |
| Cherry C 記述 | 演算 | 説明 | 結果のビット幅 |
|---|---|---|---|
| ! | 論理否定 | 0と等しいかどうか | 1 |
| ~ | ビットNOT | ビットごとの論理否定 | 変わらない |
| Cherry C 記述 | 演算 | 説明 | 結果のビット幅 |
|---|---|---|---|
| A ? B : C | 条件演算子 | Aが0でなければB、そうでなければC | BとCの大きい方 |
変数の一部のビット列を切り出して使いたい場合は、以下のように書きます:
b = a#(4..2);
この例では、変数 a のビット2〜4を切り出して b に代入しています(3ビット幅)。
1ビットだけを切り出す場合は:
b = a#(0);
トップレベル記述では、左辺の一部ビットに右辺を接続することもできます:
b#(4..2) = a;
この例では、b のビット2〜4に a を接続しています。
Cherry Synでは、演算子の意味に応じて、演算結果の型(ビット幅)が自動的に推論されます。型を明示しなくても、以下のように自然な型が導かれます:
uint#8 x, y;
# z = x + y; // z は uint#8 と推論されます(加算)
# v = x @ y; // v は uint#16 と推論されます(連結)
この型推論により、記述が簡潔になり、演算子の意味がそのまま型に反映されます。設計者の意図が、型宣言に邪魔されずに流れるように表現されるのです。
それでは皆さん、またお会いしましょう!