シフト演算子には右シフト演算子と左シフト演算子の2つがあります

🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟いか🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐊🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟たい🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟



マックス「ぷくぷくぷく💭


#include <iostream>


using namespace std;


int main() {


int a=5<<2;

cout << a << "\n";


return 0;


}


ビルド実行結果


20


int a=5<<2;


が実行されると


まず


数値データ5が


int型の形式で32ビットのメモリに


00000000000000000000000000000101


と格納される


その後


5<<2


の実行により


int型の形式で32ビットのメモリに格納されている


00000000000000000000000000000101



すべての0と1が左に2個ずれた状態で


00000000000000000000000000010100


と格納し直される


101が左に2つずれたら


空白になる部分の


10の位と1の位には


0が格納されるというわけだ


そして


00000000000000000000000000010100


つまり


数値データ20



int型の変数aに格納されることになるので


System.out.println(a);


が実行されると


コマンドプロンプト画面に


20が表示されるというわけだ。


となるとだ・・・


5<<2;

をだな・・・」


シフト演算子<<「❔?(*´▽`*)」


<<すいすい


マックス「


5>>2;


と記述したらどうなるんだ。」


>>すいすい


シフト演算子<<の向きを

>>

に入れ替える。


右シフト演算子>>「(*´▽`*)」


マックス「なんだ?」


>>すいすい


右シフト演算子>>の向きを

<<

に入れ替える。


<<すいすい


左シフト演算子<<「あお(*´▽`*)」


<<すいすい


シフト演算子<<の向きを

>>

に入れ替える。


>>すいすい


右シフト演算子>>「(*´▽`*)」


マックス

「なるほど・・・


>>は右シフト演算子で

<<は左シフト演算子というわけか・・」


🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟


マックス

「向きがかわると


演算子名がかわるのか」


🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟


右シフト演算子>>「さあ この


広大な青い海の中で


私を使って


プログラミングしてくださいな。」


🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟


マックス「うぉぉ 

左シフト演算子<<

から

右シフト演算子>>

うつりかわったぁ


ということは


プログラムの実行結果もかわってくるのか?」


🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟


#include <iostream>


using namespace std;


int main() {


int a=5>>2;


cout << a << "\n";


return 0;


}


ビルド実行結果


1


🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟


マックス「きたぁ


華麗に決めるぜ!


まずはな!


なんで


ビルド実行結果が1になるんだ!?


といいたいところだがな!


おおおおおぉぉ


俺はなぁ


根本的に


int a=5>>2;


の意味がわからんのだ


はぁっはっは~~~


ぷくぷくぷく💭」


🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟


右シフト演算子>>



int a=5>>2;


は  


変数aを


       5>>2



で初期化してるんです。」




🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟>>🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟




マックス「ぷくぷく💭


int a=5;



int a=8;


のように

変数aを5や8で初期化したように


変数aを5>>2


で初期化したってことか.


ぷくぷく💭」



右シフト演算子>>


「そう わたしは右シフト演算子>>で


数値データ5に作用しているんです


5>>2


の>>は


5*2

5+2


乗算演算子*

加算演算子+


と同じ


演算子なんだ。


だから


int a=5>>2;



int a=5*2;



int a=5+2;


のように


変数aを初期化することと一緒かな?」


マックス「なるほど・・・


そうなのか


ナイス説明だ

がっちり理解したぜぇ。


うぉぉ

だが

5>>2


の意味がわからぬぅ!


なんで5に>>がくっついているんだ」


右シフト演算子>>「


それは次のプログラムをみれば


わかるようになるなる。


#include <iostream>


using namespace std;


int main() {


int a=5;

cout << a << "\n";


return 0;

}


ビルド実行結果


5


マックス「まんま


普通に変数aに格納された数値5


ビルド実行結果に表示された!


またまたやるなぁ


ぷくぷく💭」


右シフト演算子>>「すごい?


そう思うでしょう?


この青い海の中でおこる


コンピュータプログラムの神秘です。


int a=5;


が実行されると


まず


数値データ5は


int型の形式で32ビットのメモリに


00000000000000000000000000000101


と格納されるんです。


次に


5>>2;


の働きにより


int型の形式で32ビットのメモリに格納されている


00000000000000000000000000000101



int型の形式で32ビットのメモリに


00000000000000000000000000000001


と格納し直されるんです。


すいすい>>。」


🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟>>🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟



マックス「ぷくぷく💭?


何がおこってるんだ


これは??」


右シフト演算子>>


「すいすい>>。


int a=5>>2;


が実行されると


まず数値データ5が


int型の形式で32ビットのメモリに


00000000000000000000000000000101


と格納されます


その後


5>>2


の実行により


int型の形式で32ビットのメモリに格納されている


00000000000000000000000000000101



すべての0と1が右に2個ずれた状態で


00000000000000000000000000000001


と格納し直されるんです。


このように


101が右に2つずれたら

101の10の位の0

1の位の1は

32ビットのメモリからはみだして

消えてしまいます。


そうなると


00000000000000000000000000000101

□□000000000000000000000000000001


となって


□□の部分は

空白になってしまいますが


□□の部分には


0が格納されます。


すいすい>>。


int a=16>>5;


が実行されると


まず

数値データ16が


int型の形式で32ビットのメモリに


00000000000000000000000000010000


と格納されます


そして


16>>5


が実行されると


int型の形式で32ビットのメモリに格納されていた


00000000000000000000000000010000



すべての0と1が右に5個ずれます。


□□□□□000000000000000000000000000


ここで

はみだした0と1はきえてしまいます。


ですので


□□の部分は

空白になってしまいますが


□□の部分には


0が格納されて


int型の形式で32ビットのメモリに


00000000000000000000000000000000


が格納されることになります


00000000000000000000000000000000



数値データ0を表しています


その後


int a=16>>5;


の実行により


int型の変数aには


0が格納されることになります


すいす~い>>」


マックス「な、なにぃ


ぷくぷく💭」


シフト演算子>>「そ・れ・で


int型の変数aには


00000000000000000000000000000000


つまり


数値0が


格納されているので


System.out.println(a);


が実行されると


コマンドプロンプト画面に


数値0が表示されることになるんです。」


🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟🐟





  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る