• ベストアンサー

シフト演算子?

print(3<<1) # 6 print(3<<2) # 12 print(3<<3) # 24 pythonで以下のようなコードでどうしてこのような出力結果になるのでしょうか?

noname#229394
noname#229394
  • Python
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • Kaneyan-R
  • ベストアンサー率42% (1256/2923)
回答No.2

3は二進数で0011(2+1)です。 これを左にシフトしますから 1シフト 00000011→00000110 = 4+2=6 2シフト 00000011→00001100 = 8+4=12 3シフト 00000011→00011000 = 16+8=24 になります。

noname#229394
質問者

お礼

ありがとうございました

その他の回答 (1)

  • maiko0333
  • ベストアンサー率19% (840/4403)
回答No.1

数字は2進数で管理されている。 10進数で0を1個増やしたら10倍になるように 2進数で0を1個増やしたら(左に1ビットシフト)2倍になる。 2つずらせば4倍、3つずらせば8倍ですね。

noname#229394
質問者

お礼

ありがとうございました

関連するQ&A

  • シフト演算について教えてください

    関数の結果が以下のEparamErr だったときに、EnumDstInstrの値を付与させたいのですが、シフト演算がわからず、苦戦しています。 以下のコードで、前半の8ビットシフトはどういうことを指しているのでしょうか。 retはORの結果が入ることはわかるのですが・・・・ 後半の0x0000FF00との計算は、8ビットシフトの結果とのANDの結果ですよね・・・ --------------------------------------------------------------------- [ヘッダ] int EparamErr = -11; enum EnumDstInstr { enum1 = 1, enum2 }; ・・・ [コード] ・・・ ret |= (((int)EnumDstInstr.enum1 << 8) & 0x0000FF00) --------------------------------------------------------------------- よろしくお願い致します。

  • シフト演算について

    シフト演算について   正の数の場合,シフト操作によって0が消えていくのは問題ない。   シフト操作によって1が消えると結果が変になる。これが「あふれ」 2の補数表現による負の数の場合,結論はこうなります。   負の数の場合,シフト操作によって1が消えていくのは問題ない。   シフト操作によって0が消えると結果が変になる。これが「あふれ」 以下からの抜粋です。 http://okwave.jp/qa/q4302488.html 負の数の場合,シフト操作によって1が消えていくのは問題ないのはなぜですか?

  • シフト演算について

    基本情報技術者試験の資格試験のための勉強をしているものです。 現在、カテゴリー的には基礎理論の離散数学、 シフト演算のうち、「論理シフト」ではなく、 「算術シフト」で理解できない点があります。 左シフトは理解できたつもりなんですが・・・ 右シフトがいまいちよくわかりません。 以下に例題を表記します。 【10001100を2ビット左シフト】 先頭ビットは符号ビットということで、マイナスの数値になるのだと思います。すると、 【元の数】 10001100 =-(0001100) =-(8+4) =-12 【2桁左シフト結果=元の数×2^2】 10110000 =-(0110000) =-(32+16) =-48 となり、 元の数=-12 結果 =-48 で、結果が元の数×2^2で結果が合っているようです。 (と思っているだけなんですが) 元の数の考え方自体に間違いがありそうですが・・・ とりあえず進みます。 同様に 【10001100を2ビット右シフト】すると 【2桁右シフト結果=元の数×2^-2(=元の数×1/4)】 11100011 =-(1100011) =-(64+32+8+4) =-99 となり、 元の数=-12 結果 =-99 で、結果が元の数×2^-2(=元の数×1/4)と結果が合いません。 先頭符号を空いたビットに移動した部分は数えないのでしょうか。 すると、 元の値 =-12 結果  =-3 で結果が合う気がします。 過去の回答や検索サイトなどで調べてみましたがピンときません。 テキストにも、10進数での数値表記はなく、 答え合わせができなくて困っております。 どなたかお答えいただけると助かります。 どこが間違っているのか混乱しております。 先頭ビットが正負の符号ビットという前提の例題なのですが、 マイナス符号がついている前提となるので 先頭ビットや空いたビットに入れた符号ビットも含めて 「2の補数」で考える必要があるのかどうかも よくわからなくなってきました。 つまり、元の数値「10001100」は「-12」ではなく -(01110100) =-(64+32+16+4) =-116 なのでしょうか なお、C言語は今のところ学習していないので、 C言語にまつわるご回答ですともっとわからなくなりそうです。 単純に間違いを指摘していただけると大変助かります。 よろしくお願いします。

  • PythonでUTF8の文字列をリストに入れると文字化けする

    PythonでUTF8の文字列をリストに入れると文字化けして、困っています。 以下、サンプルコードです。 a='あ' print a cmd=[] cmd.append(a) print cmd 結果は以下のようになります。 あ ['\xe3\x81\x82'] 文字化けしないようにリストに格納するにはどうすればよいでしょうか。 また、最終的にやりたいことは、リストの内容をLinuxのコンソールに出力することです。 Linux上で、$'\xe3'$'\x81'$'\x82'とすると'あ'という風に認識してくれるので、このようにリストに格納されれば良いと思っているのですが、良い方法はあるでしょうか。 よろしくお願いします。

  • pythonのエラーについて教えて下さい。

    pythonの勉強をおこなっている超初心者です。 ネットでみた。以下のサンプルコードを実行しようとしました。 # -*- coding: utf-8 -*- print u'モジュールのロード' def test(): print u'関数:testを呼び出しました' if __name__ == '__main__': print 'python-izm' # print 'パイソンイズム' test() しかし、以下の様なエラーとなってしまいます。 File ”test02.py"、line 9 print ’python-izm'  ^ indentionError:expected an indented block ネット調べてみたとことpythonのインデントのエラーだとわかりました。 pythonはインデントで実行範囲を認識するので、 そこがうまく記述できていないであろうとは思うのですが、何回か試したのですが うまく動いてくれません。 どなたか御指南下さい。

  • pythonのprintで出力された内容をまとめてstringにいれる

    pythonのprintで出力された内容をまとめてstringにいれる方法? pythonでhtmlをprint出力した内容をstr型などに文字列として 格納したいと考えています。 WEBで調べたのですが、pythonは最近、勉強しはじめたばかりで、 調べ方が悪く、見つけられません。 どのような方法があるのでしょうか? *勉強不足で申し訳ございません。

  • python四則演算の問題

    python初心者の者です。 ある問題で、input()を使って入力した数字を百倍して表示するという問題があって、以下が作成したプログラムです。 ~省略~ line = input print(line * 100) 例で10をlineに代入したとして実行すると、1000ではなく、10が100個表示されるのですが、これはprint()内のlineが文字として認識されているから100かけれないんですか? 昨日始めたばかりでエラーについて全然わからないもので、 教えてください!

  • phpのコードにprintを書いているコードを見た

    phpのコードにprintを書いているコードを見たんですが phpにもPythonみたいにprint関数があるんですか? echoもありますよね? どうやって使い分けているんでしょうか?

    • ベストアンサー
    • PHP
  • シフト演算について

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

  • pythonでsplitの使い方

    rubyで次のようなコードを実行すると期待通りの結果が得られるのですが、pythonでは上手くいきません。pythonとrubyでは正規表現の使用の仕方に相違があるのでしょうか? str = "あかさたな&12345|abcde&67890|#$()=" cat = str.split(/&|\|&|/) print cat rubyでは ["あかさたな", "12345", "abcde", "67890", "#$()="] となりますが、 pythonでは / の所でinvalid syntax と叱られます。