最終更新日



ビット・バイト・2進数・16進数・色指定

コンピュータの基礎の一つに2進数 がある。2進数というのは、0か1か、2つの状態しか表現できないが、それだけに電気回路で実現するのが簡単だから。電流が流れている状態を1とすれば、流れていない状態を0とするだけだから。これがディジタル回路 、連続波を忠実に再現しようとする従来のアナログ回路に比べると、ずっと楽に作れるということです。

100年以上も前に、ブール論理代数が確立していて、それを利用すれば2進論理回路の設計も簡単にできるという利点もあり、当初、アナログコンピュータも作られていたのですが、すぐ、現在のようなディジタルコンピュータにとってかわられました。今では、ステレオやカメラ、テレビまで、ディジタル化のご時世です。

というわけで、コンピュータを利用するときにも、あちこちに、2進数 やその親戚筋の16進数 が顔を出します。やはり、一度、きちんと整理しておいた方がいいでしょう。

2進数・16進数

我々が普通に使っている数は、10進数。中世に、アラビア人が考え出したという数字に、16世紀、インド人が発見したというゼロを加えて、0〜9までのたった10ケの数字 で、どんな大きな数でも表現できる、考えてみればすばらしい表記法です。普段、あまりにもあたりまえに使っているから、気がつかないことかもしれませんが、その秘密はどこにあるのでしょうか?

そのキーは、 桁の概念 にあります。
325と書くと、100の桁(位)の値が3だから300、10の桁(位)の値が2だから20、1の桁(位)の値が5だから、300+20+5というわけです。こういう表記法を可能にするには、1〜9までの数で十分でしょうか?

「ゼロの発見」と言われても、どういう関係があるの?というところだったでしょうが、何もないという0も必要なのです。
 例えば、3025 = 3 * 103 + 2*101 + 5 = 3000+20+5という数を表したいとき、100の桁の値はない、0という表記が必要です。

「ゼロの発見」以前に、大きい数を表すのに、どうしているでしょう? 日本では、一、拾、百、千、万、億、兆、京...ですね。ローマ数字も大変です。我々が、普段なにげなく使っている数字がいかに便利か、そのキーが桁であるということです。

ところで、一体、それが2進数とどう関係しているの?ということですが、10進数との違いは単に、桁の大きさだけです。10の単位で桁があがるのが10進法、2の単位で桁があがるのが2進法 です。

2になれば、桁があがるのだから、1つの桁の値は0と1の2つの数しかありません。例えば、1101という2進数は、1101 = 23 + 22 +01 +1で、10進数にすると、8+4+1=13です。

なんだか分かったようで分からないという状態で、イメージがわかないかもしれません。10進法の世界にびったり入り込んでいますから、別の世界になじむには、多少の時間が必要でしょう。
 ところで、時間の単位は10進法ではありませんね。60秒たては1分、60分たてば、1時間というところだけは60進法 です。

現実はさておいて、純粋に数の性質を追求する数学では、2進法に限らず、3進法、5進法、7進法、なんでもありです。実際に使われるかどうかは、数学の世界ではどうでもいいことらしい。

そういう中で、2進法とその親戚筋の16進法は、しっかりとコンピュータの世界で使われています。たた、0と1と2つの状態しか表現できない2進法で、どうして天文学的数字を計算したり、複雑な人間社会のデータ処理を処理させられるのでしょうか? それは、桁を増やせばいい のです。
 2,4,8,16(4桁),32,64,128,256(8桁),512,1024(10桁),....,,65536(16桁)......,,という調子です。世にいうねずみ算ですね。どこまでも大きくなります。
 そして、1文字の表現には、後で詳しく書きますが、2進8桁とか2進16桁使います。

なお、コンピュータのしくみ には、中学生と高校生の対話の形で、丁寧に書かれたページがありますので参考にして下さい。

ビット・バイト

10進・2進・16進数
10進数2進数16進数
000000
100011
200102
300113
401004
501015
601106
701117
810008
910019
101010A
111011B
121100C
131101D
141110E
151111F

コンピュータをやっていると、ビット(bit)とかバイト(byte)とかという言葉がよく出てきます。

   メモリ容量 256MB(メガバイト)、ハードディスク容量 80GB(ギガバイト)
   ADSLの伝送速度 8Mbps(メガビット/sec、毎秒 8メガビット伝送)、
   ISDN 64Kbps(キロビット/sec、理想的なADSLは100倍以上速い)、
   内蔵モデム 56Kbps(キロビット/sec)など。
  LANの伝送速度 10Mbps(10Base)ないし100Mbps(100Base)
   USBの伝送速度  12Mbps(約1.5Mバイト/秒) 
     (USBとは、それまでのシリアルポート、パラレルポートにかわり、
   モデム、プリンタなどの周辺機器を接続するための標準的なポ
   ート。最高で40倍高速のUSB2も開発中)
  IEEE1394の伝送速度 400Mbps(ハードディスクやデジタルビデオを
   接続するときにも使われるポート)

  ビット(bit)=2進数1桁 のこと。バイト(byte)=8ビット で構成。

アルファベット、特殊記号 数字だけの欧米の文字なら、8ビットあれば十分表現できるゆえ、バイト=1文字 といってもいいでしょう。  ただ、ひなかな、カタカナ、漢字も持つ日本語の文字数は256ではとうてい足りません。そこで、2バイト=2進数16桁 使います。

  2進数8桁最小値   0000 0000           10進数=0       16進数=0
  2進数8桁最大値   1111 1111            10進数=255     16進数=FF
  2進数16桁最大値  1111 1111 1111 1111  10進数=65535   16進数=FFFF

2進数と16進数 なお、上記のように2進数をずらずら並べるのは分かり難いので、2進数を4桁ずつ区切って、16進数 で表現するのが一般的です。16進法は、15までを1桁として、16になると、桁上げしますが、0から9までは、普通の数字を使い、10以上15までを1桁としてあらわすため、アルファベット、A,B,C,D,E,Fを使います。

  FD = 15 * 161 + 13
  FFFF = 15 * 163 + 15*162 + 15*161 + 15
  65535 = FFFF = 10000 - 1 = 164 - 1 (計算を簡単にする方法)

あらためて、まとめると、  0から9までの10種類の数字を使い、10になると桁上げするのが10進法。
 0と1の2つの数字しかなく、2になると桁上げして、10(ジュウではなく、イチゼロというべき)となるのが2進法。
 16進法は上記。10進、2進数との対応表を右に示します。
また、テキスト・ボックスへの入出力−基本プログラム3 で、いろいろな数で、16進、10進数変換をお試しください。

文字コード(Character Code)

2進8桁(1バイト)で、0から255まで、256種類のものが区別できます。アルファベットの世界はこれで十分。これをどのように各文字に割り当てるかは自由ですが、ASCII (American Standard Code for Information Interchange)が標準になっています。[2] 様々な文字コード 参照。
最近は、Unicode ということで、文字コードの国際化が進められていますが、アルファベットの部分は、ASCIIコードがとりこまれています。

ASCIIコード表の一部

右の表は 日本語と文字コード よりお借りしたASCIIコード表の一部です。上の行の数字は、上位4ビットの16進数、縦の列は、下位4ビットの16進数を表します。数字の1はASCIIコードでは31(16進)、Aは 41(16進)、 aは 61(16進)という具合です。

日本語は、漢字、ひらかな、カタカナと到底、256種類では表現しきれないので、2バイト使うことは説明しましたが、256×256=65536通り の表現ができます。
具体的な文字コード体系の一つがWindowsの日本語表示の標準となっている、シフトJISコード です。JISコードもあるし、Unix、インターネットの世界では、EUC というコードが主流です。
最近は世界標準として、前述のUnicodeも出てきました。

テキスト・ボックスへの入出力−基本プログラム3 の「4 文字列を16進コード文字列に変換」で数字や大文字、小文字のアルファベットやひらかな、漢字などのコード変換をお試しください。

先に紹介した(日本語と文字コード) のほか (文字コードについて)が詳しい。Japanese <-> Unicode Mapping Rules なども参照下さい。

IPアドレス・アクセス権

手っ取り早く、IPアドレスを知る方法をまず紹介しましょう。スタート−プログラム−アクセサリ−コマンドプロンプト で、真っ黒い文字しか扱えない画面をだします。1世代前の基本ソフト、MS-DOSをエミュレート (模倣)したものです。

E:\>ping www.daito.ac.jp とすると、
 Pinging thales.ic.daito.ac.jp [192.47.204.101] with 32 bytes of data:と返ってきます。pingと打つと、pongと返る、ネットワーク上のピンボンで、接続できているかどうかを調べるコマンドです。

この192.47.204.101はIPアドレス といわれるものです。この表示が2進8桁、8ビットを44ケ並べたものの10進表記です。
大東大のホームページを置くWebサーバの方は、
E:\>ping www.t.daito.ac.jp
Pinging www.t.daito.ac.jp [192.47.204.102] with 32 bytes of data:

別例、nifty
E:\>ping www.nifty.com
Pinging www.nifty.com [202.248.141.68] with 32 bytes of data:

IPアドレスのことは、4 インターネットの仕組み概要 を参照下さい。

アクセス権

ファイルのアクセス権 (パーミッション)は、Windowsの世界にはないのですが、Unix,Linux,インターネットの世界ではあたりまえのことで、ひとつひとつのファイルについて、誰がどのような形でアクセスできるかを指定するものです。ホームページをWebサーバにアップロード するときには必要になります。

ファイルの読み書き実行をrwxと表しますが、また、2進数の10進表記で、 読みを4、書きを2、実行を1 として、この全てができるなら7、読み書きだけを許すなら6、読みと実行なら、5と表します。こういうところにも、2進数が使われているという例で紹介しておきます。詳しくは、5 アップロード・FTP を参照下さい。

16進数による色指定

ディスプレイの全ての色は、三原色の原理により、Red(赤),Green(緑),Blue(青)の組み合わせ によって表示されます。組み合わせは、それぞれ、8ビット2桁ずつの16進数(00〜FF)のRGB(赤、緑、青)の値によって指定されます。
ホームページの文字や背景色もそのようにして指定されます。

赤、緑、青の原色は、それぞれの16ビットがフルの値です。
 赤 #FF0000 or RGB(255,0,0) 緑 #00FF00 or RGB(0,255,0) 青 #0000FF or RGB(0,0,255)
 赤、緑、青のそれぞれ2色の組み合わせは、黄色 #FFFF00 ピンク #FF00FF 薄青 #00FFFF
 赤、緑、青がすべて0が黒、すべてフルが白です。白 #FFFFFF 黒 #000000

中間色のカラーチャートを大学のファイルサーバ Y:\高橋 賢\配布\色指定\color.htmに紹介しておきます。視覚的に16進数と10進数の対応なども見ながら、三原色の組み合わせをいろいろ操作して、背景色などにいい色を選んでください。
   これは、Java,JavaScriptでプログラムされ、簡単に16進数で色指定のできるいろがかわるひろば をもとにしたものです。

JavaScript講座ーカラーコード表カラーコード表 も背景色を選ぶのに、向いているかもしれません。
 なお、フルカラー(24ビット) とは、8ビット×3色からきています。
 FFFFFF=256*256*256=約1677万色。

グラフィックスは、どうして大容量を必要とするのか?
画面上を細かい点(画素)に分割 して、グラフィックスを表現しています。標準は、640×480(ドット)。そのそれぞれの点に対して、カラー情報が必要となります(bmp形式)。
 モノクロなら1ビット、16色なら4ビット、256色なら8ビットです。
モノクロ 640×480×1=307.2 Kbit=38.4 Kbyte (8で割ってbyteに変換)
16色 640×480×4=1228.8 Kbit=153.6 Kbyte

数年前の標準は、640×480 16色で、VGA規格(Video Graphics Array)といいいます。最近は、S-VGAとして、800×600, 1024×768, 1280×1024ドットで、16ビットを必要とする65536色とか、フルカラー(24ビット)1677万色というのもあります。
VRAM=Video Random Access Memory搭載のグラフィック・アクセレータ・カード が必要で、画素数、色数が増えると、当然、必要なグラフィック・メモリがか多くなります。

容量はますます大きくなる方向ですが、画像圧縮技術も進んでおり、インターネットで標準になっているJPEG形式 では、10ないし20分の1くらいに圧縮、しかし、かなりの画質を保っています。もともと、色数の少ない絵は、 gif形式 で圧縮。

画像・音楽情報

音はなぜ大容量を必要とするのか?
 音の原型はwav波形。PCM(Pulse Code Modulation)と言われる方式で、アナログの音声をディジタルに変換しています。一定の時間間隔で、そのときの音の大きさを数値化 して、サンプリングしていきます。

CDの音質なら、1秒間に、44.1K回(KHz)、音の大きさを16ビット で細分化するなら、44.1K×16 / 8 =88.2 Kbyte、ステレオで2倍、1分間ならその60倍、約10Mbyte必要となります。
 ラジオ音質でも、11 KHz 8ビット、ステレオ、1分間で約1.32Mbyteとなり、フロッピィにも入るかどうかという大きさになります。
 画像に比べても大きいのは、時間要素が入るからです。

音声や動画の圧縮とその再生も進んでおり、Real Player、MP3、WMAなどが有名です 。私のホームページでも、CDの音楽を圧縮するMP3,wmaファイルの作成 で紹介しています。

ページ独自カウント