Dをつつく16-シフト演算。スイ~スイ~。
まぁ、気楽にこのコードを実行してみて。
import std.stdio;
int main( char[][] ) {
int value = -8;
writeln(value, "を1ビット右シフトすると「", value >> 1, "」になった");
value = -8;
writeln(value, "を1ビット左シフトすると「", value << 1, "」になった。");
//オーバーフローした場合をチェック
value = 2;
writeln(value, "を32ビット左シフトすると「", value << 32, "」になった。");
value = 2;
writeln(value, "を32ビット右シフトすると「", value >> 32, "」になった。");
return 0;
}
このコードを見ればボクがチェックするべきだと言った理由が分ると思う。 シフト演算を普通に使っている時は言語ごとの差異は記号ぐらいしかないけど、 オーバーフローした時の挙動は言語ごとに違うピヨ。 注意してね。
ところでこのコードの実行結果はどうだった?
オーバーフローで例外が発生しないと思わなかったでしょ?
多言語を扱う場合はこういった盲点を事前にチェックしておこう。
ドリィちゃん「なに偉そうな事言っているのよ。それ私が貴方に言った事でしょょw」
う、うん。まぁね。ええと・・・。と、とにかく、これ以上ドリィちゃんに何か言われる前に終わり。