Home > Latest topics

Latest topics > ビットシフトと高速な演算

宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能! シス管系女子って何!? - 「シス管系女子」特設サイト

ビットシフトと高速な演算 - Feb 28, 2006

2進数では、ビット列をずらすだけで簡単に2n倍または1/(2n)倍(できる。

10進数2進数(ビット列)
10000001
20000010
40000100
80001000
160010000
320100000
641000000

2進数というのは0と1というビットの並び(ビット列)でできている。数値を2倍するというのは、このビット列を1つ左にずらすことに等しく、1/2倍する(2で割る)というのは、1つ右にずらすことに等しい。

4倍するというのは、2×2倍すること=2回2倍するということ。つまり、数値を4倍するというのは、このビット列を左に2つずらすということだ。

8倍するというのは、2×2×2倍すること=3回2倍するということ。つまり、数値を8倍するというのは、このビット列を左に3つずらすということだ。

2進数が基本になっているコンピュータでは、2の倍数をかける(2の倍数で割る)計算はこのようにすれば、何の面倒もなく物凄く高速に結果を得ることができるわけである。ゲームプログラミングのようなとにかく高速なレスポンスが要求される分野では、こういうテクニックが多用されるのだそうだ。

……と、2進数が特別であるかのように書いてみたけれども、よく考えればべつに2進数だけに限ったことじゃあない。みんなも小学校の算数で覚えただろう。10倍すると、桁が1つ上がって末尾に0が増えるだけで済む。100倍(102倍)なら0が2つ増えるだけ。1000倍(103倍)なら3つ増えるだけ。10n倍する計算は楽でいい。ということを。

同様に、8進数は8倍すれば1桁上がり、8で割れば1桁下がる。16進数は16倍すれば1桁上がり、16で割れば1桁下がる。何進数でもこれは成り立つ。

一般化するとこういうことだ。n進数をnm倍すると、m桁上がる。nmで割ると、m桁下がる。

よっぽど効率が重視されるプログラミングの現場でもなければそんなに役に立たない知識なので、まあ、トリビアってことで。

分類:トリビア・ムダ知識, , , 時刻:01:50 | Comments/Trackbacks (1) | Edit

Comments/Trackbacks

2進数とは?

今回はちょっと思考を変えて、2進数(二進数・二進法)についてお話したいと思います。
2進数(2進法)は、パソコンやプログラムの本を読んでいると、必ずといってもよいほど出てくる単語です。
まず普通に生活していては巡り合うことはないでしょう。
ですからほとんどの人が知らなくて当然なのですが、パソコンやプログラミングの本には、当たり前のように書いてあります。
なので、このあたりの用語を押さえておかないと、あいまいのまま進んでしまいますよね。
でも、わかってしまえばそんなに難しいものではないので、今回は、2進数(2進法)について、簡単に説明していきます。

Trackback from ネットビジネス用CGI Perl HTML Javascriptの情報サイト at 2006/06/14 (Wed) 00:46:18

TrackBack ping me at


の末尾に2018年6月21日時点の日本の首相のファミリーネーム(ローマ字で回答)を繋げて下さい。例えば「noda」なら、「2006-02-28_bit.trackbacknoda」です。これは機械的なトラックバックスパムを防止するための措置です。

Post a comment

writeback message: Ready to post a comment.

2018年6月21日時点の日本の首相のファミリーネーム(ひらがなで回答)

Powered by blosxom 2.0 + starter kit
Home

カテゴリ一覧

過去の記事

1999.2~2005.8

最近のつぶやき