2進数足し算 計算ツール|繰り上がり付き加算・2の補数・10/16進変換
2進数(バイナリ)の足し算を、繰り上がり付きで即時計算。10進・16進・8進を同時表示、オーバーフロー検出と2の補数による符号付き演算まで対応します。基本情報技術者試験・応用情報技術者試験、組込みソフトウェア開発、デジタル回路設計、CPU論理設計、TCP/IP・IPアドレス計算などで頻用される基礎公式を、情報処理推進機構(IPA)の公式試験基準に照らして解説します。
2進数足し算 計算機
計算式と基本ルール
2進数の演算はコンピュータの最も基礎的な処理。10進数と同じ位取り記数法ですが、繰り上がりが「10」ではなく「2」で発生する点だけが異なります。
2進数の基本表現
2進数 = ビット列(0/1のみで構成) × 位ごとの重み(2ⁿ)
2進数(binary)は、0と1の2つの数字だけで数を表現する記数法です。各桁は右から順に 2⁰=1, 2¹=2, 2²=4, 2³=8, 2⁴=16... の重みを持ち、10進数と同じ位取り記数法で機械的に変換できます。例えば 1010₍₂₎ = 1×8 + 0×4 + 1×2 + 0×1 = 10₍₁₀₎。
足し算の基本ルール
0 + 0 = 0(繰り上がりなし)
0 + 1 = 1(繰り上がりなし)
1 + 0 = 1(繰り上がりなし)
1 + 1 = 10(繰り上がりあり: この桁は0、上位桁に1加算)
2進数の加算は10進数と同じ「位ごとに足して繰り上がりを上位に送る」というシンプルな仕組みで動きます。10進で「9+1=10」となるように、2進で「1+1=10」となるのが本質的な違いです。
ハードウェア実装
1桁の2進加算器は半加算器(HA: Half Adder)と呼ばれ、XOR回路(和)とAND回路(繰り上がり)の2素子で構成できます。桁を連ねた全加算器(FA: Full Adder)を並べたものがCPUの算術論理演算装置(ALU)の基礎。JIS X 0021「情報処理用語―数学演算」でも定義される情報工学の基本回路です。
桁数と扱える最大値
nビットの2進数で表現できる整数の範囲は、無符号で0〜2ⁿ-1、符号付き(2の補数)で-2ⁿ⁻¹〜2ⁿ⁻¹-1。例: 8ビットなら無符号0〜255、符号付き-128〜+127。CPUのレジスタ幅(64ビット)は最大 約1.844×10¹⁹(無符号)まで扱え、通常のアプリケーションで桁溢れになることは稀です。
2進・10進・16進の違い
コンピュータ内部の演算はすべて2進で行われますが、人間が読み書きしやすい形式として10進・16進も併用されます。それぞれの記数法の特徴を整理します。
コンピュータ上での数値表現に頻出する記数法を整理します。
| 記数法 | 基数 | 使用数字 | 主用途 |
|---|---|---|---|
| 2進数(binary) | 2 | 0, 1 | 回路・CPU・機械語 |
| 8進数(octal) | 8 | 0-7 | UNIXパーミッション |
| 10進数(decimal) | 10 | 0-9 | 日常計算 |
| 16進数(hexadecimal) | 16 | 0-9, A-F | メモリアドレス・色コード |
2進数は桁数が長くなりがちなため、実務では4ビットを1桁の16進にまとめて表記します。例: 1010 1100₍₂₎ = AC₍₁₆₎。C言語では0b1010(2進)、0xAC(16進)、0o12(8進)、Pythonではbin()、hex()、oct()で相互変換します。
2進数足し算 基本パターン早見表
手計算の練習・試験対策で頻用する代表パターンです。
4ビット×4ビットの主要パターン。手計算での確認に便利です。
| A (2進) | B (2進) | A+B (2進) | 10進換算 |
|---|---|---|---|
| 0001 | 0001 | 0010 | 1 + 1 = 2 |
| 0011 | 0001 | 0100 | 3 + 1 = 4 |
| 0101 | 0011 | 1000 | 5 + 3 = 8 |
| 0111 | 0001 | 1000 | 7 + 1 = 8 |
| 1010 | 0101 | 1111 | 10 + 5 = 15 |
| 1010 | 1100 | 10110 | 10 + 12 = 22 |
| 1111 | 0001 | 10000 | 15 + 1 = 16(オーバーフロー) |
| 1111 | 1111 | 11110 | 15 + 15 = 30 |
| 10101010 | 01010101 | 11111111 | 170 + 85 = 255 |
| 11111111 | 00000001 | 100000000 | 255 + 1 = 256(8bit桁溢れ) |
| 10000000 | 10000000 | 100000000 | 128 + 128 = 256 |
実際のCPU内では、桁上げ伝搬加算器(Ripple Carry Adder)や桁上げ先見加算器(Carry Lookahead Adder)がハードウェアで並列処理し、1クロックで数十ビットの加算を完了させます。
10進⇔2進 変換早見表(0〜31)
| 10進 | 2進 | 16進 | 10進 | 2進 | 16進 |
|---|---|---|---|---|---|
| 0 | 0000 | 0 | 16 | 10000 | 10 |
| 1 | 0001 | 1 | 17 | 10001 | 11 |
| 2 | 0010 | 2 | 18 | 10010 | 12 |
| 4 | 0100 | 4 | 20 | 10100 | 14 |
| 8 | 1000 | 8 | 24 | 11000 | 18 |
| 10 | 1010 | A | 26 | 11010 | 1A |
| 15 | 1111 | F | 31 | 11111 | 1F |
桁数の目安: 8ビットで0〜255、16ビットで0〜65,535、32ビットで約42億、64ビットで約1,844京。IPv4アドレスは32ビット、IPv6は128ビット。
繰り上がりの仕組み
2進加算での「繰り上がり」は、CPU内の加算器回路が実際に行っている動作です。人間の手計算とハードウェア動作が完全に一致するため、原理を理解すればデバッグ・設計にも直結します。
2進数足し算では、各桁を右(最下位ビット)から順に処理し、繰り上がり(キャリー)を上位桁に伝搬させます。例えば 1011 + 0110 は以下のように処理されます。
1 0 1 1 (A = 11)
+ 0 1 1 0 (B = 6)
─────────
1 1 (最下位: 1+0=1, 次: 1+1=10→0繰上1)
1 (次: 0+1+1(繰上)=10→0繰上1)
1 (次: 1+0+1(繰上)=10→0繰上1)
─────────
1 0 0 0 1 (合計 = 17)
これはCPU内の桁上げ伝搬加算器(Ripple Carry Adder)の動作そのもの。高速化のため実際のCPUは「桁上げ先見加算器(Carry Lookahead Adder)」を使い、複数桁を並列処理します。
2の補数と符号付き演算
負数の扱いは2進演算の応用範囲を大きく広げる重要概念。加算器のみで減算を実現できるため、CPUのハードウェア設計を大幅に簡略化します。
コンピュータでの負数表現は、2の補数(two's complement)方式が標準です。JIS X 0201やIEEE規格でも採用されています。
2の補数の作り方
- 絶対値を2進数で表現する
- 各ビットを反転(0→1, 1→0)する
- 1を加算する
例: 8ビットで -5 を表現するには、+5 = 00000101 → 反転 11111010 → +1 → 11111011 = -5。
符号付き加算の例
8ビット符号付き整数の範囲は -128 〜 +127。例えば 5 + (-3) は、00000101 + 11111101 = (1)00000010 = +2 (8ビットに切り詰めて先頭のキャリーは無視)。減算が加算回路で実現できるのが2の補数の最大の利点です。
オーバーフローの検出
符号付き演算で、両方が正で結果が負(または両方が負で結果が正)になった場合はオーバーフロー。ハードウェアでは最上位ビットへのキャリー入力とキャリー出力のXORで検出します。
実務例で見る2進数足し算
例1: 8ビットカウンタのオーバーフロー
8ビット無符号カウンタで 250 + 10 = 260 → 260 mod 256 = 4。9ビット目に繰り上がった1が捨てられて4になります。組込みシステムでのループカウンタ管理では、16ビットや32ビットに拡張するか、飽和演算(255で頭打ち)にするかの設計判断が必要です。
例2: IPv4サブネットマスク計算
IP 192.168.10.100(11000000.10101000.00001010.01100100)とマスク 255.255.255.0(11111111.11111111.11111111.00000000)のAND演算でネットワーク部 192.168.10.0 を得ます。ANDは各ビットの積で、2進加算の基礎素子と同じXOR/ANDゲート組合せで実装可能。
例3: 2の補数による減算実装
8ビットで 20 - 15 は、20 + (-15) = 00010100 + 11110001 = (1)00000101 = 5。減算専用回路が不要になり、加算器のみで四則演算の減算が実現できます。ARMやIntelなど全CPUで採用される基本アーキテクチャです。
例4: CRCチェックサム(XORベース)
Ethernetフレームの誤り検出に使うCRC-32は、送信データを多項式で除算(XOR演算の連鎖)して32ビットの余りを付加。受信側で同じ計算をして余りが0なら正常。1ビットの誤りも高確率で検出可能な仕組みです。
例5: 浮動小数点(IEEE 754)の加算
0.1 + 0.2 = 0.30000000000000004 になる有名な問題。IEEE 754 倍精度では 0.1 = 3FB999999999999A(16進)、0.2 = 3FC999999999999A で、加算後に丸め処理で誤差が発生。金額計算では整数(円→銭)扱いか BigDecimal 等の専用ライブラリで対応します。
業界での応用
CPU論理設計・ALU
加算器(半加算器・全加算器・桁上げ先見加算器)はCPUの算術論理演算装置(ALU)の中核。Intel/AMD/ARMプロセッサすべての基本回路。Verilog/VHDLでのRTL設計、JIS C 6151(半導体集積回路)関連基準。
組込みソフトウェア開発
マイコン(ARM Cortex-M、AVR、PIC)のレジスタ操作でビット演算・2進加算を多用。センサ値の平均・累積、通信プロトコルのチェックサム計算、割り込みマスク設定。IPA組込みスキル標準(ETSS)対応。
ネットワーク・IPアドレス設計
IPv4のサブネットマスク計算、ネットワーク・ホスト部の分離、CIDR記法の展開。IPv6の128ビットアドレス操作。RFC791/RFC4291準拠。ネットワークスペシャリスト試験の頻出範囲。
基本情報技術者試験・応用情報
IPA主催の国家試験。午前問題「基礎理論」で2進数演算、2の補数、シフト演算、論理演算が毎年10問前後出題。桁あふれ・浮動小数点(IEEE 754)の理解が必須。
デジタル回路・FPGA設計
論理ゲート(AND/OR/NOT/XOR)から構成する加算器の設計、シフトレジスタ、フリップフロップ。Xilinx/Altera(現Intel)のFPGA開発でVerilog/VHDLコードから実際の回路にコンパイル。
通信プロトコル・誤り検出
CRC(巡回冗長検査)、ハミング符号、パリティビットは2進加算(XOR)の応用。Ethernet・Wi-Fi・Bluetoothで実装。IEEE 802系規格、ITU-T勧告に準拠した実装が求められる。
よくある間違い・注意点
- 桁あふれ(オーバーフロー)の無視 — 8ビット無符号で255+1は0(9ビット目が消える)。組込みシステムでのループカウンタで暴走の原因になります。桁数を事前に見積もる習慣を。
- 符号付き/符号なしの混同 — 8ビットの11111111は無符号で255、2の補数(符号付き)で-1。演算前にどちらの解釈かを必ず確認してください。
- ビット反転と2の補数の混同 — ビット反転(1の補数)は各桁を0↔1反転のみ。2の補数は反転+1。負数表現に使うのは2の補数です。
- 基数(prefix)の書き忘れ — 「10」だけでは2進(=2)か10進(=10)か区別不能。C言語で0b, 0x, 0oを付ける、または末尾に₂・₁₀・₁₆の添え字を付けます。
- MSB(最上位ビット)とLSB(最下位ビット)の順序取り違え — ビッグエンディアン(上位優先)とリトルエンディアン(下位優先)は通信プロトコル・ファイル形式で差異があります。バイト順にも注意。
- 浮動小数点との混同 — 2進加算は整数(fixed-point)の話。浮動小数点(float, double)はIEEE 754規格に基づき、指数部・仮数部の別処理が必要。0.1+0.2=0.30000...4 になる有名な問題も浮動小数点の性質。
- 符号拡張の忘れ — 8ビットから16ビットへの拡張時、符号付きなら最上位ビットを16ビット目までコピー(符号拡張)、符号なしなら0で埋めます(ゼロ拡張)。
- 先頭0の扱い — 「00101010」と「101010」は同じ42。ただし、C言語では先頭0が付いた
012は8進の12(=10進10)と解釈されるため、意図せず異なる値になる場合があります。
関連する規格・法令
- JIS X 0021 ― 情報処理用語―数学演算。2進・10進・16進の演算、桁上げ、補数の定義。
- JIS X 0212 ― 情報交換用漢字符号―補助漢字。文字コードでの2進表現の基礎。
- IEEE 754 ― Standard for Floating-Point Arithmetic。浮動小数点数の国際標準規格。
- ISO/IEC 10646 ― Universal Coded Character Set (UCS)。Unicodeの基盤規格。
- RFC 791 / RFC 4291 ― IPv4 / IPv6のアドレス構造。2進数によるアドレス設計。
- JIS C 6151 ― 半導体集積回路。加算器・ALU等のデジタル回路の分類。
- 情報処理技術者試験基準(IPA) ― 基本情報・応用情報の出題範囲。基礎理論分野で2進演算が必修。
- IEC 60559 ― IEEE 754の国際電気標準会議版。浮動小数点算術の国際規格。
- ISO/IEC 9899 ― C言語の国際標準規格。ビット演算子・整数型の定義。
参考文献・公的資料
より正確な仕様や試験対策情報を確認したい場合は、以下の公的機関の資料を参照してください。
- 情報処理推進機構(IPA) 基本情報技術者試験 ― 国家試験の公式情報。出題範囲・過去問題・解答例。基礎理論(2進演算)の必修範囲。
- 日本産業標準調査会(JISC) ― JIS X 0021(情報処理用語)、JIS C 6151(半導体集積回路)などの規格索引。
- IEEE Standard 754-2019 Floating-Point Arithmetic ― 浮動小数点数演算の国際標準。米国電気電子技術者協会の公式仕様。
- RFC 791 - Internet Protocol (IPv4) ― IPv4の基盤仕様。32ビットアドレスの構造。
- RFC 4291 - IPv6 Addressing Architecture ― IPv6の128ビットアドレス仕様。
- ISO/IEC 10646:2020 Universal Coded Character Set ― Unicodeの基盤となる国際文字コード規格。
- ITU-T Recommendation V.42 ― データ通信の誤り訂正手順。CRC・パリティビット等。
- 文部科学省 高等学校情報科(情報Ⅰ) ― 高等学校での情報教育カリキュラム。2進数演算の指導内容。
- 電子情報通信学会(IEICE) ― デジタル回路・情報理論の学術団体。加算器・論理回路の学術的位置づけ。
- 情報処理学会(IPSJ) ― 情報処理の学術団体。コンピュータアーキテクチャ・数値表現の解説。
よくある質問(FAQ)
2進数足し算の基本ルールは?
各桁で 0+0=0、0+1=1、1+0=1、1+1=10(この桁は0で上位桁に1繰り上がり)。これを最下位ビットから順に処理して繰り上がり(キャリー)を伝搬させます。10進の「9+1=10」と同じ考え方で「1+1=10」となるのがポイントです。
2進数の負数はどう表現する?
2の補数(two's complement)方式が標準。絶対値を2進数化 → 各ビット反転 → 1を加算。例: 8ビットで -5 は +5(00000101) を反転(11111010) → +1 → 11111011。この方式なら減算を加算回路で実現でき、+0と-0の区別も生じません。
桁あふれ(オーバーフロー)とは?
ビット幅(例えば8ビット)を超える結果になる現象。無符号8ビットで 255+1=256 は9ビット目が捨てられて 0 になります。符号付きでは 127+1 = -128 と符号が反転。組込みシステムでのループカウンタで暴走の原因になるため、必ず桁数を事前に見積もる必要があります。
10進から2進への変換方法は?
整数部は2で割った商と余りを繰り返し、余りを下から並べます。例: 13 → 13/2=6余1 → 6/2=3余0 → 3/2=1余1 → 1/2=0余1 → 下から読んで1101。プログラムでは N.toString(2) (JS) や bin(N) (Python) で一発変換可能です。
2進と16進、なぜ相互変換が簡単?
16 = 2⁴ なので、2進の4桁がちょうど16進の1桁と対応します。例: 1010 1100₂ = A C₁₆ = AC₁₆。CPUのメモリアドレス・レジスタ値は32ビットや64ビットで、2進表記だと長すぎるため16進で表記するのが実務標準です。
基本情報技術者試験での出題頻度は?
IPA(情報処理推進機構)の午前試験で「基礎理論」分野として毎年10問前後出題。2進・16進変換、2の補数、シフト演算、論理演算、浮動小数点(IEEE 754)は基本項目。過去問演習でパターン学習が有効です。
ハミング符号やCRCと2進加算の関係は?
誤り検出・誤り訂正符号は、通信データを多項式で扱い、XOR(排他的論理和)による加算で計算します。XORは2進の加算から繰り上がりを無視した演算と同じで、ハードウェア実装が高速。Ethernet・Wi-Fi・USBなど主要通信規格すべてで使用されます。
JavaScriptで2進数を扱う方法は?
parseInt("1010", 2) で2進→10進、(10).toString(2) で10進→2進。ビット演算子は &(AND)、|(OR)、^(XOR)、~(NOT)、<<(左シフト)、>>(右シフト)。ただしJSのビット演算は32ビット整数として扱われます。
IPアドレスの計算で2進数が使われるのは?
IPv4は32ビット(4オクテット×8ビット)、IPv6は128ビット。サブネットマスクの計算、ネットワーク部とホスト部の分離、CIDR(例: /24)の展開はすべて2進数で行います。ネットワーク管理者・スペシャリストの基礎スキル。RFC 791/RFC 4291準拠。
半加算器と全加算器の違いは?
半加算器(HA)は「2つのビットを加算し、和と繰り上がりを出力」する回路(XOR+AND)。全加算器(FA)は「2つのビット+下位からの繰り上がりを加算」する回路(HAを2つ+OR)。全加算器を連ねたものがCPUの加算器の基本構造です。
浮動小数点の計算で誤差が出るのはなぜ?
IEEE 754の浮動小数点は仮数部を2進で表現するため、10進の 0.1 が2進では無限循環小数(0.00011001100...)になります。有限ビットで丸めるため 0.1+0.2 = 0.30000000000000004 のような誤差が発生。金額計算などでは整数(円→銭単位)で扱うか、専用ライブラリ(BigDecimal等)を使います。
2進数の掛け算・割り算はどう計算する?
掛け算は10進と同じ筆算方式で、各桁の1に対して被乗数をシフトして加算。実装ではシフト+加算のループ。割り算は減算+シフトの繰り返し。CPUには専用の乗算器・除算器が搭載されており、加算器より複雑ですが原理は同じです。