BLOG

2021.09.23ブログ

コンピュータで数値をどうやって表す?

皆様、こんにちは。代表の小林です。今まで何回かに分けてコンピュータで扱うデータについて説明をしました。(コンピュータは0、1で計算をする?コンピュータで扱うデータコンピュータで扱う色情報)今回はコンピュータで計算するために数値を表す方法について書いてみます。


正の数と負の数


以前の記事を見ていただいていれば、2進数で表すというのは予想はつきますが、正の値、負の値はどう表しているでしょう?例えば4ビットのデータを考えることにします。例えば、5は、0101と表現できますが、-5はどうなるのでしょうか?これを解決するために使われている考え方が補数です。ある数とその補数とを足し合わせたときに、桁上りがちょうど起こる数が補数になります。今回の例でいうと、4ビットの桁上りというのは 10000 になりますので、10000 - 00101 = 1011 となります。1011 が−5という扱いになるということです。 なぜこれでうまくいくかといいますと、桁上りした値を無視することで計算できるようになるからです。例えば 2-5 という計算をしてみます。


0010 + 1011 = 1101 (2 + (-5) = -3) 


となりますが、1101 は−3になるので、計算結果としてはあっています。このようにコンピュータでは引き算でも足し算でも関係なく同じ足し算で計算をしていることになります。ちなみに補数の求め方は、桁上りをした数から引き算する方法もありますが、ビットを反転(0を1、1を0)にし、1を足す方法でも求められます。0011 (3) の補数は、1101 (-3) となりますね。


実数


先程は整数の話でしたが、小数を含む実数はどうなるでしょうか?これもある形式を使って表しています。具体的な説明をすると長くなるので、簡単なイメージを掴んで頂くように説明をします。実数を整数部分と小数部分に分けます。そして小数点の位置を整数の値が一桁になるように移動させます。10進数で説明すると、100.5 と 1.005 × 10^2 (10の2乗)は同じ値ですよね。このように累乗を使うと小数点の位置を変更できます。そのため、整数部、小数部、指数部の3つのパートに分けて実数を表現することで、同じフォーマットで広い範囲の値を表すことができます。例えば、100.5 は先程のように考えると、整数部1、小数部 005、指数部 2 となります。このような考え方を浮動小数点演算(floating point arithmetic) と呼びます。実際のコンピュータでは 2 の累乗で表現するのですが、考え方は10進と変わりません。pythonなどの言語で実数のデータ型を float と呼ぶのはこの浮動小数点数演算の名前から来ています。float という単語に実数という意味はないですからね。


まとめ


今回はコンピュータで扱う数値の表現方法について説明しました。知識として知っておいていただくと、コンピュータで計算したときに計算結果をどう評価するかや、整数と実数で型が違うことが実際にコンピュータ上での表現方法が異なることなどが理解できるかと思います。


プログラミングを学ぶなら「ドクターコード」


ドクターコードはタイムレスエデュケーションが提供しているオンラインプログラミング学習サービスです。初めての方でもプログラミングの学習がいつでもできます。サイト内で質問は無制限にでき、添削問題でスキルアップ間違いなしです。ぜひお試しください。


ドクターコードに進む »

INFORMATION無料体験会・ワークショップ・ご案内

     

春の無料体験会

無料体験会を実施します。ぜひ一度ご体験ください!

プログラミング&ロボット教室 授業運営パッケージ

弊社で実施している授業を取り入れたい方々向けに提供しています。