第85回 なぜ256はキリがいいのか

256はキリがいいか?

256はキリがいいとされているそれはなぜか?

それは 2の8乗だからだ。
しかし、この表現、難しいと言うか、
個人的に理解しにくい。

100がキリがいいのは何故か?

なぜ、100はキリがいいのか?

それは 10の2乗だからだ。

って言われて、あんまり納得できない。数学が得意ではないせいか?


それは、0が2つ並ぶからだ。
1000はなぜキリがいいのか?
それは、0が3つ並ぶからだ。
と答えてもらったほうが納得がいくというか、個人的にはわかりやすい。

256はキリがいい

ということで、この方法で説明すると、
10進数での 256 を 2進数で表現すると、

10000000

となって、0が並ぶのでキリがいい。

累乗

さて、話を10進数に戻して、
100は、10の2乗である。

うん。わかりにくいが、話を我慢してすすめる。

100は、10の2乗である。これを
10^2
と書く。


1000は、
10^3
と書ける。

10000は、
10^4


2乗は0が2個並ぶし、3乗は0が3個並ぶ。4乗は4個。

2進数で考える

さて
2^1 = 2  (10進数表現)
2^2 = 4  (10進数表現)
2^3 = 8  (10進数表現)
2^4 = 16  (10進数表現)
なわけだが、
これを上から順に2進数で表すと、


10  (2進数表現)
100  (2進数表現)
1000 (2進数表現)
10000 (2進数表現)


となる。10進数で2の何乗というのを2進数で表現すると、
やはり何乗の部分は0の数を表している。

シフトという発想

シフトと言葉があって、数字をシフトさせるときに使う言葉だ。
どういうことかというと、

10 (10進数)
を「左に1シフトする」というと、
100 (10進数)
左に数字がひとつずつずれて、最後に0が補われることを意味する。


10 (10進数)
を「左に2シフトする」なら、
1000 (10進数)
となる。


簡単な話で、左に1シフトすると、10倍されている(0が1個増える)し、
左に2シフトすると、100倍されている(0が2個増える)。

2進数でシフトする

では、2進数で表現したものを考える。

10  (2進数表現)

を、左に1シフトすると、やはり0が一個増えて、

100  (2進数表現)
となる。


10  (2進数表現) = 2^1  (10進数表現)
100  (2進数表現) = 2^2   (10進数表現)
なので、2進数で左に1ずれ、0が補われると、2倍されている事がわかる(10進数で)。

2進数で左シフトする演算子

2進数で左シフトする演算子

<<

が存在する。

use strict;

for(1..5){
 print "$_ の 1左シフトは ", $_ << 1, "\n";
}

結果:

1 の 1左シフトは 2
2 の 1左シフトは 4
3 の 1左シフトは 6
4 の 1左シフトは 8
5 の 1左シフトは 10

マイナスをシフトするときは...

マイナスをシフトするときは、
補数とか、実装依存とかなので、すみませんこの記事では説明しません...