C++ で負の値の左シフトを実験 ― 2021年06月03日 12時41分01秒
% cat leftshit.cpp
#include <iostream>
int main()
{
int shift = 2 << 1;
std::cout << "2 << 1 = " << shift << std::endl;
shift = 2 << -1;
std::cout << "2 << -1 = " << shift << std::endl;
shift = -2 << 1;
std::cout << "-2 << 1 = " << shift << std::endl;
shift = -2 << -1;
std::cout << "-2 << -1 = " << shift << std::endl;
}
コンパイルするとしっかりと警告がでる。
% clang++ leftshit.cpp
leftshit.cpp:8:15: warning: shift count is negative [-Wshift-count-negative]
shift = 2 << -1;
^ ~~
leftshit.cpp:11:16: warning: shifting a negative signed value is undefined [-Wsh
ift-negative-value]
shift = -2 << 1;
~~ ^
leftshit.cpp:14:16: warning: shift count is negative [-Wshift-count-negative]
shift = -2 << -1;
^ ~~
3 warnings generated.
実行してみたら、こんな結果になった。
% ./a.out
2 << 1 = 4
2 << -1 = 4215872
-2 << 1 = -4
-2 << -1 = 4215872
一部の言語では左に負の数シフトするのは、右にその正の数シフトするのと同じだという考え方もあるようだ。
コメント
トラックバック
このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2021/06/03/9384134/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。