今回は論理演算に関する確認ピヨ。「Cとどうせ同じだろ?」と思う人もいるだろうけど油断大敵。
多言語を学習するとたまに混乱するから確認だけしておいてメモしておこう。
そうした地道な積み重ねが技術者としての力を生むんだ。
という事でコードを見てね。
import std.stdio;
int main( char[][] ) {
bool x;
bool y;
//Or演算
x = true;
y = false;
writeln( "x = ", x, "y = ", y, "のOr演算の結果は?\t", x | y );
x = false;
y = false;
writeln( "x = ", x, "y = ", y, "のOr演算の結果は?\t", x | y );
x = true;
y = true;
writeln( "x = ", x, "y = ", y, "のOr演算の結果は?\t", x | y );
writeln( "" );
//And演算
x = true;
y = false;
writeln( "x = ", x, "y = ", y, "のAnd演算の結果は?\t", x & y );
x = false;
y = false;
writeln( "x = ", x, "y = ", y, "のAnd演算の結果は?\t", x & y );
x = true;
y = true;
writeln( "x = ", x, "y = ", y, "のAnd演算の結果は?\t", x & y );
writeln( "" );
//Xor演算
x = true;
y = false;
writeln( "x = ", x, "y = ", y, "のXor演算の結果は?\t", x ^ y );
x = false;
y = false;
writeln( "x = ", x, "y = ", y, "のXor演算の結果は?\t", x ^ y );
x = true;
y = true;
writeln( "x = ", x, "y = ", y, "のXor演算の結果は?\t", x ^ y );
writeln( "" );
return 0;
}
これで確認OKピヨ。でもこれだけじゃ面白くないから1つ面白い事を教えるピヨ。
このプログラムの文字列以外のところに
全角スペースを使ってみて。
どう?
珍しいエラーが出たでしょう。
これは何かというと。
文字コードに関するトラブルなんだ。
Dコンパイラのソースを見たところ、
0x3eで始まるUNICODE文字はスキャナでANSI文字列と見なされて
その結果、Lexerのscanメソッドの
if (isprint(c))
error("unsupported char '%c'", c);
else
error("unsupported char 0x%02x", c);
p++;
continue;
}
の部分でエラーを出力されるピヨッ。
その理由はANSIでは<にあたるからなんだ。
なお、UNICODE−8では先頭バイト00-7FはANSIの制御文字に当たるんだよ。
だから
全角スペースを使用したら絶対に駄目。
でもこれはパーサーのプログラムミスだと思うピヨね。
パーサーがちゃんと全角スペースを取り除いていればこの部分へ到達する事は無い筈。
もしかしたらそうしない理由があるのかもしれないけどね。