サイタプログラミングスクールC言語プログラミング入門講座神奈川 楽しめるC言語セミナー スクールブログ 負の整数の2進...

負の整数の2進数数値表現

前回は、整数の範囲について書きました。

その最後で、「負の整数の2進数数値表現は、どのようになるのか」という点に触れました。今回は、この点について書きます。

まず、結論から書きます。

負の整数の2進数数値表現は、「正の整数の2進数数値表現の全ビットの0/1を入れ換えて、最後に1を加えたもの」になります。

例として、1バイトの大きさをもつ整数100の場合で示します。

整数100は、2進数数値表現で「01100100」となります。

この表現の全ビットの0/1を入れ換えます。すると「10011011」となります。

最後に、1を加えて「10011100」となります。これが、100に対する負の整数である「-100」の2進数数値表現となります。

このとき、100に対する負の整数-100のように、基準となる数値に加えた場合の答えが0となるような整数のことを「補数」と呼びます。そして、2進数の場合の補数のことを「2の補数」と呼びます。

2の補数の作り方は、前述した「全ビットの0/1反転→最後に1を加える」になります。

ここで、負の整数を2進数数値表現で表した場合に最上位のビットが必ず「1」となることに、注目してください。この最上位のビットのことを、特に「符号ビット」と呼びます。

C言語の場合で最上位ビットを符号ビットとして扱うかどうかは、数値の型(shortやlong等)の前に「signed」または「unsigned」を付けることで制御します。前者が符号ビットにする、後者が符号ビットにしない(即ち、より広い範囲の正の整数が取り扱える)、となります。いずれも指定しない場合は、符号ビットにする動作となります。

さて前回のブログで、負の整数を取り扱う場合に負の整数の範囲のほうが1だけ広いことに触れました。これは、「符号ビットだけが1、他が0」(例えば1バイトで表すと10000000)の表現が負になる(= -128)ことが理由です。正の整数は「0〜127」の128個、負の整数は「-1〜-128」の128個が取り扱える、ということですね。

今回触れた2の補数の考え方は、基本情報技術者試験用の各種参考書で説明されていますので、お持ちの方はそちらも参考にしてください。

さて次回と次々回ですが、少しC言語から離れて前回の「整数の範囲」に焦点をあてて、過去のお話と未来起こる可能性の問題のお話に触れましょう。

 

(2014年4月7日(月) 15:24)

前の記事

次の記事

新着記事

コーチの源田です。 かなり久々のブログ更新になります。 今回は、これまでのプログラミングレッスンを通して再認識したことを記します。 タイトルにも記しましたが、それは  ・ アルゴリズムを作る練習の重要さ です。 アルゴリズムとは、 ・コンピュータに何ら...

源田です。 こちらの投稿は、かなりひさびさになってしまいました。 さて、最近Android用アプリ開発ツールである「Android Studio」(Android公式のもの)に注目しています。 というのも、最新のバージョン(2.2)でCやC++まわりの連係が強化されたから、な...

しばらく、更新が滞ってしまいました。すみません。 今回は整数の範囲に関する余談のその2、未来起こりうる話について書きます。 本題に入る前に、かつて「2000年問題」という騒動が起こったのを覚えていますでしょうか? これは、年に関する処理を誤ることでコンピュータが誤動作する可能...

今回から2回にわたり、整数の範囲にまつわるお話を書きたいと思います。 その1は、過去(現在でもあるかも)のお話です。 1986年5月に、後に日本を代表するロールプレイングゲーム(RPG)シリーズの初代となるゲームが発売されました。 そのゲームとは。。。ファミコン版のドラゴンク...

前回は、整数の範囲について書きました。 その最後で、「負の整数の2進数数値表現は、どのようになるのか」という点に触れました。今回は、この点について書きます。 まず、結論から書きます。 負の整数の2進数数値表現は、「正の整数の2進数数値表現の全ビットの0/1を入れ換えて、最後に...

レッスン無料相談窓口のご案内

サイタでは、C言語レッスンに関する疑問に
専門カウンセラーがお電話にてご案内しております。
お気軽にご利用ください。

お電話相談窓口はコチラ

ブログ記事 ページ先頭へ