2019年09月29日 | 更新。 |
MSB(Most Siginificant Bit)あるいは最上位ビットとは、コンピュータなどの論理回路が2進数を扱う場合に、一番大きな数を扱う(最も重みの大きい)ビットの事を指します。
一方でLSB(Least Significant Bit)あるいは最下位ビットとは、コンピュータなどの論理回路が2進数を扱う場合に、一番小さな数を扱う(最も重みの小さい)ビットの事を指します。
MSBとLSBは対になって使われる用語ですので、このページで両者をまとめて説明します。
コンピュータなどの論理回路では、数字を扱う時は2進数を使うのが普通です。
一方で人が数を扱う場合は10進数を使うのが普通ですが、数学などでは2進数を使う事があります。その場合、通常は必要最小限の桁数で数を表記します。
例えば10進数の3を2進数で表記する時は、11と2桁で表記しますし、10進数の6を表記する時は、110と3桁で表記します。つまり、大きい数を表記する場合は、2進数の桁数が増える訳です。
注意:このページでは、10進数表記の数は黒字で、2進数表記の数は緑色で表わします。
一方でコンピュータなどの論理回路で2進数を扱う場合は、数の大きさに関わりなく、最初から桁数を決めるのが普通です。
例えば8桁で2進数を表現すると決めた場合、10進数の3は、2進数では00000011と、上位の桁に0を6個補って、8桁で表現します。10進数の6の場合は、2進数では00000110と、上位の桁に0を5個補って、8桁で表現します。
この様にするのは、あらかじめ桁数(ビット数)を決めておくことにより、使用する信号線の数や、確保するべきメモリのビット数などが確定するために、処理が簡単になるからです。
参考:2進数の桁数は、ビットという単位で表わします。例えば2進数1桁なら1ビット、2進数5桁なら5ビットです。
例えば符号なし整数を扱う場合(負の整数を扱わない場合)、扱う最大の数が255(=28-1)以下だと想定される場合には、8ビットで数を表現します。また、扱う最大の数が65535(=216-1)以下だと想定される場合の場合は、16ビットで数を表現します。
Nビット(Nは1以上の整数)の符号なし整数では、0~2N−1の範囲の整数が表現できます。符号なし整数のビット数Nと、表現できる最大の整数の対応表を表1に示します。
ビット数 (N) |
表現できる最大の整数 (2N−1) |
---|---|
1 | 1 |
2 | 3 |
3 | 7 |
4 | 15 |
5 | 31 |
6 | 63 |
7 | 127 |
8 | 255 |
9 | 511 |
10 | 1023 |
11 | 2047 |
12 | 4095 |
13 | 8191 |
14 | 16383 |
15 | 32767 |
16 | 65535 |
参考:コンピュータの場合は、8ビットごとにメモリのアドレスが割り当てられる事が多いため、Nに8の倍数(特に8、16、32、64)を選ぶ場合が多いですが、その他の論理回路では、Nを8の倍数以外に選ぶ事もよくあります。
あらかじめ2進数の表現に使うビット数を決めておくと、処理が簡単になる事は先に説明しましたが、一方で、先にビット数を決めてしまうと、大きな数を、定められたビット数で表記できなくなるという問題点があります。
そこで、用途を考え、使用される最大の数を想定し、それが何ビットで表現できるかを表1などで調べて、ビット数を決めます。
例えば、100点満点のテストの点数を表現するなら、最大値が100ですから、表1より7ビット(表現できる最大の整数が127)で十分な事が分かります。
注:前述の様に、コンピュータの場合、ビット数は8の倍数で選ばれる事がほとんどですから、テストの点数は8ビット(場合によっては16ビット以上の8の倍数)で扱われる事になるでしょう。
前の章で説明したとおり、コンピュータなどの論理回路では、通常、決まったビット数の2進数として数が表現されます。
この場合、その決められたビット数の中で、最も大きな数を扱う(最も重みの大きい)ビットをMSBといい、最も小さな数を扱う(最も重みの小さい)ビットをLSBというのです。
10進数の115は、8ビットの2進数で表わすと、01110011となりますが、この仕組みを説明したのが図1です。
ここでは01110011を例に、2進数から10進数への変換方法を説明していますが、逆に10進数から2進数に変換するには、2進数の各桁の組み合わせを色々と変えてみて、10進数に変換した時に115になる様な組み合わせを探せばよい事になります。ここでは証明はしませんが、解の一意性(どんな10進数でも、2進数で表わす方法が、1通りに決まる事)が保証されています。また、2進数に変換したい数を2で割って商と余りを求め、さらにその商を2で割って…という具合に、2で割る操作を商が1になるまで繰り返す、効率の良い変換法もありますが、ここでは説明しません。
この図で分かる様に、2進数を10進数に変換するには、2進数の各桁に、右の桁から順に20、21、…、27と重みを持たせ、さらに各桁の数字と対応する重みを掛けて、それらの積の合計を求めます。
あらかじめ決まったビット数(図1の場合は8ビット)で2進数を表した場合に、最も左に書く桁の重みが最大(図1の場合27)なので、この桁をMSBといいます。
また、最も右に書く桁の重みが最小(20)なので、この桁をLSBといいます。