Dをつつく15-論理演算。バイナリの必須アイテム。
という事でコードを見てね。
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の制御文字に当たるんだよ。
だから 全角スペースを使用したら絶対に駄目。 でもこれはパーサーのプログラムミスだと思うピヨね。 パーサーがちゃんと全角スペースを取り除いていればこの部分へ到達する事は無い筈。 もしかしたらそうしない理由があるのかもしれないけどね。