全国5万人が受講している「サイタ」

C言語プログラミング入門講座・スクール

C言語プログラミング入門講座・スクールを選ぶ

初回60分無料体験OK

まずは60分の体験レッスンからスタート。
無料で実際のレッスンを体感できます。

月々4,900円〜の低料金

先生ひとりじめの個人レッスンを、この価格でご提供。レッスンは全てプライベート形式の60分間です。

通わない月は0円

曜日と時間を選べるので、
無理なくマイペースに通えます。

詳しくはこちら

プログラミングスクール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)

前の記事

次の記事

この記事を書いたコーチ

富士通でソフトウェア開発を担当。楽しいプログラミングの醍醐味、教えます

楽しめるC言語セミナー
源田雄一 (C言語)

品川・戸塚・武蔵中原・立川・新横浜・中山・長津田・成瀬・町田・関内・石川町・東小金井...

ブログ記事 ページ先頭へ