演算子(Ver9.35対応版)
目次−
式について−
演算子
秀丸マクロの式では、以下の演算子が使えます。
+ - * / % <= >= < > != == && || ! | & ^
それぞれC言語の演算子と共通です。優先順位は、以下のとおりです。
| & ^ ! の優先順位がC言語と異なるので注意が必要です。
高い <---------> 低い |
|
* |
+ |
<= |
&& |
/ |
- |
>= |
|| |
% |
|
< |
! |
| |
|
> |
|
& |
|
!= |
|
^ |
|
== |
|
括弧で囲むと、優先順位が高くなります。また、式は左から右に評価されます。
左の値で結果が自ずと決まるような場合でも、短絡評価はされず、すべて評価されます。
if( 1 || message("ここも通ります") ) { ... }
if( 0 && message("ここも通ります") ) { ... }
!= や <= などの論理演算の結果は、0または1です。
if文やwhile文は、C言語と同様に0か0以外かで判定します。
特に注意!
「!」の優先順位が「||」や「&&」と同じなので、例えば
if( #a || !#b)
if( !#a || #b)
のような表記はうまくいきません。このような表記は、
if( #a || (!#b) )
if( (!#a) || #b )
のように記述する必要があります。それと、「||」と「&&」の優先順位も同じになってしまってるので、例えば
if( #a || #b && #c )
のような表記もC言語とは意味が違ってしまいます。このような表記は、
if( #a || ( #b && #c ) )
のように、必要な箇所をカッコで囲むなどして優先順位をはっきりさせるのがお勧めです。
オーバーフロー
数値の演算は、32bitまたは64bitの符号付き整数で計算され、上限や下限を超える計算でオーバーフローが発生します。
大きな数を扱うときは注意が必要です。
32bit通常版と、浮動小数点数版の通常モード(32bit版/64bit版両方)は、32bitの符号付き整数で計算されます。
下限-2147483648(16進数で0x80000000)から上限2147483647(16進数で0x7fffffff)までの範囲になります。
64bit通常版は、64bitの符号付き整数で計算されます。
下限-9223372036854775808から上限9223372036854775807までの範囲になります。
(参考:16進数では0x8000000000000000から0x7fffffffffffffffまでになりますが、マクロ上の記述では0xの16進数で書けるのは8桁の32bitまでです。
参考)
ゼロ除算と最小値/-1のオーバーフローは、エラー扱いとなってマクロは停止します。
浮動小数点数版の浮動小数点数モード(32bit版/64bit版両方)のときは、オーバーフローは処理されません。誤差などがあります。
参考