Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

วิธีบวกเลขจำนวนเต็มสองจำนวนโดยไม่ใช้ตัวดำเนินการคณิตศาสตร์ใน C/C++

สามารถบวกเลขสองจำนวนได้โดยใช้ Bitwise Operators แทนตัวดำเนินการคณิตศาสตร์มาตรฐาน (+, -, *, /)

หลักการทำงาน (Bitwise Addition)

การบวกในระบบฐานสองทำได้โดย:

  1. XOR (^) - คำนวณผลบวกโดยไม่พิจารณา carry (0+0=0, 1+0=1, 0+1=1, 1+1=0)
  2. AND (&) - หาตำแหน่งที่มี carry (1+1=1 carry)
  3. Left Shift (<<) - ขยับ carry ไปทางซ้าย 1 ตำแหน่ง
  4. ทำซ้ำจนกว่า carry จะเป็น 0

ตัวอย่างโค้ด

#include <iostream>
#include <cmath>
using namespace std;

int add(int val1, int val2) {
    while(val2 != 0) {
        int carry = val1 & val2;      // หา carry bits
        val1 = val1 ^ val2;           // บวกโดยไม่รวม carry
        val2 = carry << 1;            // ขยับ carry ไปทางซ้าย
    }
    return val1;
}

int main() {
    cout << "The sum of two numbers : " << add(28, 8);
    return 0;
}

ผลลัพธ์

The sum of two numbers : 36

การทำงานทีละขั้นตอน (28 + 8)

28 = 0001 1100
 8 = 0000 1000

รอบที่ 1:
  carry = 28 & 8  = 0000 1000 (8)
  val1  = 28 ^ 8  = 0001 0100 (20)
  val2  = 8 << 1  = 0001 0000 (16)

รอบที่ 2:
  carry = 20 & 16 = 0001 0000 (16)
  val1  = 20 ^ 16 = 0000 0100 (4)
  val2  = 16 << 1 = 0010 0000 (32)

รอบที่ 3:
  carry = 4 & 32  = 0000 0000 (0)
  val1  = 4 ^ 32  = 0010 0100 (36)
  val2  = 0       -> หยุดลูป

ผลลัพธ์ = 36 ✓

ข้อจำกัด

  • ทำงานกับ signed integers ได้แต่ต้องระวัง overflow behavior
  • ช้ากว่าการบวกทั่วไปมาก (ใช้สำหรับการศึกษาหรือ embedded systems ที่ไม่มี ALU)
  • ไม่รองรับ floating-point numbers

การประยุกต์ใช้

หลักการนี้เป็นพื้นฐานของการออกแบบ ALU (Arithmetic Logic Unit) ใน CPU และใช้ในบางอัลกอริทึม cryptography