【資格の勉強】離散数学

※当サイトはアフィリエイト広告を利用しています。商品を紹介し、収益を得ることがあります。

基本情報技術者試験【科目A】の中から、離散数学について情報をまとめました。

基本情報技術者試験の試験要綱をまとめたページから、出題範囲の全体を確認できます。

また本ページは、「基本情報技術者試験(レベル2)シラバス(変更箇所表示版)」を参照しています。

「基本情報技術者試験(レベル2)」シラバス(Ver.9.0)(変更箇所表示版)(PDF:1.3 MB)(2023年12月25日掲載)

階層

  • 【分野】テクノロジ系
    • 【大分類】基礎理論
      • 【中分類】基礎理論
        • 【小分類】離散数学

離散数学を学ぶ目標

  • 基数、基数の変換、数値の表現、算術演算と精度など、コンピュータで扱う数値表現を理解し、担当する事項に適用する。
  • 集合、論理演算の基本法則、手法を理解し、担当する事項に適用する。

簡単に言えば、コンピューターにおける数字の表し方や計算方法、論理演算などを理解して仕事に役立てましょう、というのが離散数学を学ぶ目標です。

離散数学の内容

上記目標を達成するために理解しなければならない用語が以下です。

基数

2進数、8進数、10進数、16進数、n進数の表現、2進数と10進数などの基数の変換手法を理解する。

解説を読む

基数(きすう)とはなにか?

基数とは、桁上りの基準となる数のことです。例えば、10進数(基数=10)では、「9」の次に「10」となり桁が上がります。

同様に、2進数(基数=2)では、「1」の次に「2」となり桁が上がります。つまり、基数の数だけ数えたら桁が上がる、という仕組みです。

基数の変換手法

10進数から2進数への変換手法

10進数を2進数に変換する手法は、変換したい基数で割り続けて、余りを下から記録します。

例)10進数の「25」を2進数に変換する場合

25を2で割り続け、余りを下から順に読むと「11001」。つまり、10進数の25は、2進数の11001となります。ちなみに「イチ、イチ、ゼロ、ゼロ、イチ」と読みます。

余り
25 ÷ 2 12 1
12 ÷ 2 6 0
6 ÷ 2 3 0
3 ÷ 2 1 1
1 ÷ 2 0 1
2進数から10進数への変換手法

2進数を10進数へ変換するには、各桁の値に2の累乗(べき乗)をかけてから、全て足します。累乗は0から始まり、桁が上がるごとに1ずつ増えます。

例)2進数の「11001」を10進数に変換する場合

  • 1桁目の「1」に「20」をかけます。数学では「0乗=1」なので、1×1=1となるのです。
  • 2桁目の「0」には「21」をかけます。0×2=0となります。
  • 3桁目の「0」には「22」をかけます。0×4=0となります。
  • 4桁目の「1」には「23」をかけます。1×8=8となります。
  • 5桁目の「1」には「24」をかけます。1×16=16となります。
  • 全ての桁の数を足します。1+0+0+8+16=25となります。
  • つまり、2進数の「11001」は10進数の「25」となるのです。
2進数から8進数への変換手法

2進数から8進数へ変換するには、3桁のブロックに区切り、各桁の値に2の累乗(べき乗)をかけてから、足し合わせ、その数字を並べます。

例)2進数の「11001」を8進数に変換する手法

  • 11001を「011」と「001」に分けます。※1桁目を基準に分けます。桁が足りない場合は、左側に0を足して3桁にすると考えやすいでしょう。
  • 「011」の1桁目(1×20=1)、2桁目(1×21=2)、3桁目(0×22=0)の数字を足し算ます。1+2+0=3です。
  • 「001」の1桁目(1×20=1)、2桁目(0×21=0)、3桁目(0×22=0)の数字を足し算ます。1+0+0=1です。
  • 「011」と「001」それぞれから導き出した数字「3」と「1」を並べて、「31」となります。
  • つまり、2進数の「11001」は8進数の「31」となるのです。※ちなみに「サン、イチ」と読みます。

逆に8進数から2進数へ変換するには、「3」と「1」をそれぞれ3桁の2進数に変換して並べます。8進数の3は2進数の「011」、8進数の1は2進数の「001」。並べると「011001」(左側の0は省略可能なので11001でも可)となるのです。

2進数から16進数への変換手法

2進数から16進数へ変換するには、4桁のブロックに区切り、各桁の値に2の累乗(べき乗)をかけてから、足し合わせ、その数字を並べます。

例)2進数の「11001」を16進数に変換する手法

  • 11001を「0001」と「1001」に分けます。※1桁目を基準に分けます。桁が足りない場合は、左側に0を足して4桁にすると考えやすいでしょう。
  • 「0001」の1桁目(1×20=1)、2桁目(0×21=0)、3桁目(0×22=0)、4桁目(0×23=0)の数字を足し算ます。1+0+0+0=1です。
  • 「1001」の1桁目(1×20=1)、2桁目(0×21=0)、3桁目(0×22=0)、4桁目(1×23=8)の数字を足し算ます。1+0+0+8=9です。
  • 「0001」と「1001」それぞれから導き出した数字「1」と「9」を並べて、「19」となります。
  • つまり、2進数の「11001」は16進数の「19」となるのです。※ちなみに「イチ、キュー」と読みます。

逆に16進数から2進数へ変換するには、「1」と「9」をそれぞれ4桁の2進数に変換して並べます。16進数の1は2進数の「0001」、16進数の9は2進数の「1001」。並べると「00011001」(左側の0は省略可能なので11001でも可)となるのです。

ちなみに、16進数では、0~9の数字だけでは16種類の数字を表現できないためアルファベットも使います。【0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A(10), B(11), C(12), D(13), E(14), F(15)】

数値の表現

負の数の表現(補数表現)、小数の表現を理解する。

用語例:固定小数点数、単精度浮動小数点数、倍精度浮動小数点数、仮数、指数、BCD(Binary Coded Decimal:2進化10進、パック10進数

コンピューターは、2進数を使った特別な方法で、負の数(補数表現)や小数を表現します。

解説を読む

負の数の表し方

例えば、10進数の「-5」を2進数で表現する際は、下記の手順で行います。

  1. 「5」を2進数で表す。→00000101(8ビット)
  2. ビットを反転します。反転とは0を1、1を0にすることです。→11111010
  3. 1を足します。→11111011
  4. つまり、11111011が-5です。

2進数の計算では「00000101+11111011=100000000」となります。「100000000」は9ビットあります。このとき8ビットの計算では、左端の「1」は無視されるのです。これをオーバーフローといいます。そのため結果は「00000000」となり、「0」です。

10進数の計算では「5-5=0」ですよね。計算結果が同じく「0」になるため、「00000101+11111011=100000000」の「11111011」は「-5」と同じと考えます。

小数の表し方

例えば、10進数「12.75」を2進数の小数で表す手順は、以下です。

  1. 「12.75」を2進数に変換します。そのために、小数点の整数部(左側)「12」と小数部(右側)「0.75」に分けます。
  2. 整数部「12」を2進数にすると「1100」です。(2で割り続けて余りを下から記述する方式)
  3. 小数部「0.75」を2進数にするには、小数部を2で掛け続けて、積の整数部を上から記述します。すると「11」となります。※下記表参照
  4. 整数部と小数部をつなぎ合わせると「1100.11」となります。
掛ける数 結果 整数部分 小数部分
0.75 × 2 1.5 1 0.5
0.5 × 2 1.0 1 0.0

用語例の解説

固定小数点数

固定小数点数とは、小数点の位置が決まっている数値の表現方法のことです。

問:10進数-5.625を、8ビット固定小数点形式による2進数で表したものはどれか。ここで、小数点位置は3ビット目と4ビット目の間とし、負数には2の補数表現を用いる。

正解:1010.0110

引用元:基本情報技術者試験 平成23年秋期 午前 問2

単精度浮動小数点数

まず、浮動小数点数とは、小数を2進数で表現する形式のことです。

単精度浮動小数点数は「32ビット」で表現します。小数点を「符号」「指数」「仮数」に分けて表現します。

単精度の構成は以下の通りです。

  • 符号部は1ビット(0=正、1=負)
  • 指数部は8ビット(2の何条か)
  • 仮数部は23ビット(小数の部分)
倍精度浮動小数点数

倍精度浮動小数点数は「64ビット」で表現します。単精度小数点数と同様に「符号」「指数」「仮数」で表現します。

単精度が32ビット構成であるのに対して、倍精度は64ビットであり、より高精度です。

仮数(かすう)

仮数は値の本体部分のこと。指数などと合わせて利用される。大きすぎたり小さすぎたりする値をコンパクトにまとめるときに役立つ。特にコンピューターにおいては限られた容量を効率的に使うために必要。

10進数における仮数と指数の書き方の例
7,000,000,000,000,000,000は「7×1018」と書き換えられる。このとき、7が仮数で、1018が指数となる。

2進数における仮数と指数の書き方の例
2進数の110.01は「1.1001×22」と書き換えられる。このとき、1.1001が仮数で、22が指数となる。

指数

指数とは、仮数(同じ数)を何回掛けるかを表した数のこと。

2を3回かけるとき、2×2×2と書くよりも、23(2の3乗)と書く。このとき「3」が指数。

BCD(Binary Coded Decimal:2進化10進)

BCD(Binary Coded Decimal:2進化10進)は、10進数の1桁を、2進数の4桁に変換する方法のこと。

12(10進数)を普通の2進数で表現すると「1100」。
しかし、BCDで表現すると、12(10進数)は、0001 0010(BCD)となる。1=0001、2=0010と1桁ずつ表現するから。

パック10進数

「パック=つめこむ」という意味で、10進数の2桁分を1バイト(8ビット)に詰め込むという意味。

12(10進数)の場合、BCDでは0001 0010(BCD)と表現するが、パック10進数では0×12と表記する。「0×」は16進数を宣言する記号。

算術演算と精度

加減乗除,表現可能な数値の範囲,シフト演算,演算精度(誤差とその対策)など,コンピュータにおける算術演算を理解する。

用語例:論理シフト,算術シフト,桁落ち,情報落ち,オーバーフロー(あふれ),アンダーフロー,単精度,倍精度

用語例の解説

論理シフト

論理シフトとは、2進数のビットを左右にずらす操作のことを指します。左にずらすことを論理左シフトと呼び、右にずらすことを論理右シフトと呼びます。はみ出た部分は捨てられます。左シフトを操作した数は2倍になり、右シフトされた数は1/2となる。ずらすことで空欄が生じるので「0」で埋める。

算術シフト

算術シフトは、論理シフトと同じく、2進数のビットを左右にずらす操作のことを指す。左にずらすことを算術左シフト、算術右シフトと呼び方も変わる。はみ出た部分が捨てられ、左シフトした数は2倍、右シフトした数は1/2になるのも論理シフトと同じ。

違いは、算術シフトでは符号(正+、負-)を扱うということ。左シフトの場合は空欄に0で埋めるのは同じだが、右シフトの場合、0ではなく符号ビットで埋める。符号が「0(正)」なら0で埋め、「1(負)」なら1で埋める。

桁落ち

桁落ち(けたおち)とは、ほぼ等しい浮動小数点数を減算(引き算)するときに、計算結果の有効桁数が大幅に減る計算誤差の一つです。例えば、「123456.789 – 123456.780 = 0.009」の計算では、有効桁数が減るものの、これは正しい結果です。しかし、コンピューターで計算する際に、丸め誤差が生じて0.009が「0.01」となるような場合、これが桁落ちによる誤差と呼ばれます。

情報落ち
オーバーフロー(あふれ)
アンダーフロー
単精度
倍精度

集合と命題

論理演算

コメント