- 締切済み
シフト演算について
現在、プログラムの研修を行っているのですが、例文で 10 << 8 とういうロジックがありました。どのような、考え方でどのような結果になるのでしょうか。 10は整数値ということだけは分かっているのですが、それ以外はまったくわからず、ご教授いただければと思っております。よろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- skp026
- ベストアンサー率45% (1010/2238)
値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向けの プログラミングだと思いますが、仕事自体あまりないと思いますし 電子工学関係の知識がないと、長続きは難しいです。 シフト演算そのものは単純ではありますが、このようなコンピュータの 根幹とか進化の歴史に関係していることです。 以上、解りにくかったり参考にならなかったらごめんなさい。
- tmys10
- ベストアンサー率36% (338/930)
シフト演算はビットをずらします。 例えば 0b00001010 << 1の結果は 0b00010100 です。(2進数0b00001010、0b00010100は10進数でそれぞれ10、20です。) # C言語にはアセンブリ言語にあるような演算子がいくつも準備されていますが、デバイスドライバでも書くのでなければ使わないのではないかと思います。
- maiko04
- ベストアンサー率17% (345/1956)
<<は左に1ビットシフトです。 10進数では2倍することになります。 ので、 10<<8は10を8回2倍することです。