24
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめまして

最近IT業界に転職しました完全未経験な私です。
どうか温かい目で見守っていただけると幸いです。
私が資格取得に向けて学習をしている
基本情報技術者試験の基数変換について
私自身のアウトプットを目的とした内容を書いていきます。

進数

私たちが日常使っているものは10進数といいます
10進数は0から9までの10種類の数字を使って9の次が一つ桁上がりします
   9
+  1
  10  ←9の次が一つ桁上がる

ほかの進数の考え方は一緒!
2進数・・・0と1の2種類の数字を使って1の次が桁上がり
8進数・・・0から7の8種類の文字を使って7の次が桁上がり
16進数・・・0から9までの数字とAからFを使ってFの次が桁上がり
    F
+  1
  10

種類が多く覚えることが大変です...
↓一覧表を載せておきますので覚えるまで見ながらやるのがいいかもしれません

decimal-notation-hyo.png
添付画像引用元↓
https://spi練習問題.com/category/n%E9%80%B2%E6%B3%95/

基数

基数とは各桁の重みづけの基本となる数と言われています。
10進数では一の位が10⁰、十の位は10¹、百の位は10²・・・と10が基本になっている
※桁の重みとは各桁の単位のこと

N進数の重み
小数点を基準に左→N⁰、N¹、N²・・・
小数点を基準に右→N⁻¹、N⁻²、N⁻³・・・

image.png
添付画像引用元↓
https://math-room.hatenablog.com/entry/math01/14/02

この公式を頭に入れておく。
学生の時に数学(算数?)で教わりました…懐かしい…

N進数から10進数へ基数変換

基数変換とは??
→ある進数で表現された数値を別の進数で表現すること!

まず一個頭にまた入れることは
N進数から10進数に変換の場合各桁の重みと数値を掛けて結果を合計

ややこしいですね

例えば
2進数101.101を10進数に変換したい場合
101 →1×2²+0×2¹+1×2⁰=1×4+0×2+1×1=4+1=5
.101→1×2⁻³+0×2⁻²+1×2⁻¹=1×0.125+0×0.25+1×0.5=0.625

5+0.625=5.625  となりこちらが答えになります。
8進数、16進数も考え方は同じです

10進数からN進数へ基数変換

本来2通りのも求め方があるのですが今回は初心者に優しいといわれている方法を載せていきたいと思います

割り算と掛け算を使う方法
例:10進数38.625を2進数で求める場合

整数部の38と小数部の0.625に分けて求めていきます

整数部の38を2進数で表すには2で割っていき余りの数を下から上に並べていきます。
38÷2=19…0
19÷2=9……1
9÷2= 4……1
4÷2= 2……0
2÷2= 1……0
1÷2= 0……1

商が0になるまで繰り返します。
10進数38の2進数は100110になりました

小数部を2進数で表すには2を掛けて整数部を順に並べていきます
0.625×2=1.25
(小数部のみを引き継いでいく)

0.25×2= 0.5
0.5×2= 1.0
小数部分が0になるまで繰り返します。
10進数0.625の2進数は101となります。
最後に整数部と小数部を合わせて100110.101になります!

2進数から8進数へ基数変換

これは少し楽にできます!!

方法としては小数点を基準に2進数を3桁に区切り分け、各ブロックを8進数に直します
(足りない分は0で補う)

例 2進数1100.01を8進数で表す
001
  →0×2²+0×2¹+1×2⁰=1
100
  →1×2²+0×2¹+0×2⁰=4
.010
  →0×2²+1×2¹+0×2⁰=2

したがって2進数1100.01を8進数で表すと14.2となる

2進数から16進数へ基数変換

こちらも先ほどとやり方はほとんど一緒!区切る数が違うだけ!

方法としては小数点を基準に2進数を4桁に区切り分け、各ブロックを16進数に直す
(足りない分は0で補う)

例 2進数1100.01を16進数で表す

1100
  →1×2³+1×2²+0×2¹+0×2⁰=12→C
  (16進数は12ではなくCになることを忘れずに!)
.0100
  →0×2³+1×2²+0×2¹+0×2⁰=4

したがって2進数1100.01を16進数で表すとC.4となる

8進数から2進数へ基数変換

こちらは今までやってきたことの逆を行っていきます
方法としては8進数の1桁を2進数3桁に直す

例 8進数63.5を2進数へ

6 →0+4+2=1×2²+1×2¹+0×2⁰=110
3 →0+2+1=0×2²+1×2²+1×2¹=011
5 →4+0+1=1×2²+0×2²+1×2¹=101

したがって8進数63.5を2進数に表すと110011.101となります

16進数から2進数へ基数変換

ここまでやってくればなんとなくやることはわかってきたはず

方法 16進数の1桁を2進数4桁に直す

例 16進数D4.Cを2進数で表す

D →13(これは10進数の値)→8+4+0+1=1×2³+1×2²+0×2¹+1×2⁰=1101
4 →0+4+0+0=0×2³+1×2²+0×2¹+0×2⁰=0100
C →12(10進数の値)→8+4+0+0=1×2³+1×2²+0×2¹+0×2⁰=1100

したがって16進数D4.Cを2進数で表すと11010100.1100となります

おつかれさまでした

16進数を2進数に変える際途中10進数を挟むと間違い少なく解けそうです

長々とありがとうございました。
書き始め投稿することでアウトプットできるのか不安があったのですがただ黙々と独学するより身についた気がします。

参考文書↓

参考動画↓

24
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?