算術/ビット/論理

プログラミング言語の内、高級なものはおおよそ真偽値型 (boolean) を持っている。 C も例外ではない。 しかし、 C において真偽値型の地位は低い。 if 文や while 文といった真偽が必要とされる箇所においても、整数としてゼロになる値が偽、それ意外が真として解釈されるだけで、真偽値型を経由しないのである。 又、比較演算子が返す値も真偽値型ではなく整数型の 1 又は 0 だ。

さて、先日ふと気まぐれに N88-BASIC のマニュアルを読んでいると、 N88-BASIC でも IF 文が判定に用いるのは整数であるということに気付いた。 C と同様にゼロならば偽、それ意外が真として解釈する。 だが違う箇所もある。 比較演算子による比較で真だった場合に返すのは -1 なのだ。 マイナスは 2 の補数形式で表されるので -1 は全てのビットが立った状態である。

真を -1 で表すと便利なのはビット演算と論理演算を区別しなくてよい点だ。 実際、 N88-BASIC には論理演算子などというものはない。

算術演算、ビット演算、論理演算をごちゃまぜにするのは筋が悪い方法だが、だからこそ出来ることもあってとても面白い。

Document ID: 22e758f142a9ec2226f54a7c0a8c64ee