「MSB」の解説

このページをスマホなどでご覧になる場合は、画面を横長にする方が読みやすくなります。
このエントリーをはてなブックマークに追加
2019年09月29日 更新。
用語:MSB
略語の完全な表記:Most Significant bit
同義語・類義語:最上位ビット
このページで解説している他の用語:LSB最下位ビット
概要

MSB(Most Siginificant Bit)あるいは最上位ビットとは、コンピュータなどの論理回路が2進数表記の数を扱う場合に、一番大きな数を扱う(最も重みの大きい)ビットの事を指します。

一方でLSB(Least Significant Bit)あるいは最下位ビットとは、コンピュータなどの論理回路が2進数表記の数を扱う場合に、一番小さな数を扱う(最も重みの小さい)ビットの事を指します。

MSBとLSBは対になって使われる用語ですので、このページで両者をまとめて説明します。

目次

1. コンピュータ内部の2進数の表現 … 1ページ
2. MSBとLSB … 1ページ
広告

1.コンピュータ内部の2進数の表現

コンピュータなどの論理回路では、数字を扱う時は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に示します。

表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

前の章で説明したとおり、コンピュータなどの論理回路では、通常、決まったビット数の2進数として数が表現されます。

この場合、その決められたビット数の中で、最も大きな数を扱う(最も重みの大きい)ビットをMSBといい、最も小さな数を扱う(最も重みの小さい)ビットをLSBというのです。

10進数の115は、8ビットの2進数で表わすと、01110011となりますが、この仕組みを説明したのが図1です。

図1、2進数と10進数の関係
↑ 画像をクリックすると拡大
図1、2進数と10進数の関係
ここでは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といいます。

このエントリーをはてなブックマークに追加

関連ページ

このサイトの記事が本になりました。
書名:Arduino 電子工作
ISBN:978-4-7775-1941-5
工学社の書籍の内容の紹介ページ
本のカバーの写真か書名をクリックすると、Amazonの書籍購入ページに移動します。
こちらのページもおすすめです。