みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

シフト演算について

現在、プログラムの研修を行っているのですが、例文で 10 << 8 とういうロジックがありました。どのような、考え方でどのような結果になるのでしょうか。
10は整数値ということだけは分かっているのですが、それ以外はまったくわからず、ご教授いただければと思っております。よろしくお願い致します。

投稿日時 - 2019-03-09 21:49:30

QNo.9595241

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

値10を8ビット分左シフトするという記述です。

2進で10をあらわすと、
0000000000001010となり、8ビットシフトすると
0000101000000000こうなります。
10進としての値は2560です。

以下のような変換ツールは便利です。
https://hogehoge.tk/tool/number.html


なぜこのようなロジックがあるというと、コンピュータは
2進数が扱いやすい設計であることと、ハードに関係するためです。
CPUには計算用のアキュムレータがあり、その内容をシフトする
などして計算したり、値をチェックするなどしています。
あとCPUに沢山のポートが付いていることを見たことあると思いますが、
例えばCPUのコードとして特定のアドレスにはポートの状態が
取得できます。仮に16本のポートが見れるアドレスなら
0000000000001010とう感じになったりします。
ただし、現在のプログラミングでは、アキュムレータを意識する
必要なくコーティングできるようになっていますし、
Windowsなど、アプリレベルでは物理アドレスにはアクセス禁止に
なっているシステムが最近は多いです。
意識する必要があるのはWindowsでしたらデバイスドライバの
プログラミングです。もしくは4ビットや8ビットCPU向けの
プログラミングだと思いますが、仕事自体あまりないと思いますし
電子工学関係の知識がないと、長続きは難しいです。

シフト演算そのものは単純ではありますが、このようなコンピュータの
根幹とか進化の歴史に関係していることです。
以上、解りにくかったり参考にならなかったらごめんなさい。

投稿日時 - 2019-03-10 08:29:11

ANo.2

シフト演算はビットをずらします。
例えば 0b00001010 << 1の結果は 0b00010100 です。(2進数0b00001010、0b00010100は10進数でそれぞれ10、20です。)

# C言語にはアセンブリ言語にあるような演算子がいくつも準備されていますが、デバイスドライバでも書くのでなければ使わないのではないかと思います。

投稿日時 - 2019-03-10 01:00:06

ANo.1

<<は左に1ビットシフトです。
10進数では2倍することになります。
ので、
10<<8は10を8回2倍することです。

投稿日時 - 2019-03-09 21:52:33

あなたにオススメの質問