สามารถบวกเลขสองจำนวนได้โดยใช้ Bitwise Operators แทนตัวดำเนินการคณิตศาสตร์มาตรฐาน (+, -, *, /)
หลักการทำงาน (Bitwise Addition)
การบวกในระบบฐานสองทำได้โดย:
- XOR (^) - คำนวณผลบวกโดยไม่พิจารณา carry (0+0=0, 1+0=1, 0+1=1, 1+1=0)
- AND (&) - หาตำแหน่งที่มี carry (1+1=1 carry)
- Left Shift (<<) - ขยับ carry ไปทางซ้าย 1 ตำแหน่ง
- ทำซ้ำจนกว่า 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