ในปัญหานี้ เราได้รับสองตัวเลข งานคือสร้างโปรแกรม C สำหรับการบวกแบบบิตวายส์แบบเรียกซ้ำของสองจำนวนเต็ม
ตรรกะในการหาผลรวมโดยใช้การดำเนินการบิตวายส์ คล้ายกับสิ่งที่เราทำตอนเรียนประถม สำหรับหาผลรวม เราบวกแต่ละหลักของตัวเลข และถ้ามีการนำ (carry) เราจะนำไปบวกกับหลักถัดไป
เราจะทำอย่างเดียวกัน หาผลรวมโดยใช้ตัวดำเนินการ XOR และตรวจสอบการนำโดยใช้การดำเนินการ AND หากมีการนำ เราจะนำกลับไปบวกกับตัวเลข มิฉะนั้นไม่ต้องทำ
นี่คือตรรกะของ Half-Adder ซึ่งคุณอาจเรียนในวิชาอิเล็กทรอนิกส์ดิจิทัล
ตอนนี้ ผลรวมคำนวณโดยใช้ a^b คือ a XOR b และเราต้องตรวจสอบการนำเพิ่มเติมที่ต้องส่งต่อ หากบิตแรกของทั้งสองเซต และเราต้องเพิ่มบิตเซตเพิ่มเติมให้กับตัวเลข
ดังนั้น อัลกอริทึมบิตจะเป็น
ขั้นตอนที่ 1 — หา XOR ของ a และ b คือ a^b และเก็บในตัวแปรผลลัพธ์
ขั้นตอนที่ 2 — ตรวจสอบถ้า {(a & b) << 1} == 0
ขั้นตอนที่ 2.1 — ถ้าเท่ากับ ให้พิมพ์ผลลัพธ์ นี่คือผลลัพธ์สุดท้าย
ขั้นตอนที่ 2.2 — ถ้าไม่เท่ากับ 0 ให้ไปขั้นตอนที่ 1 โดย a = {(a & b) << 1} และ b = ผลลัพธ์
ตัวอย่าง
โปรแกรมแสดงการทำงานของอัลกอริทึม —
#include <stdio.h>
int addNumbers(int a, int b) {
int carry = (a & b) << 1;
int result = a ^ b;
if (carry == 0)
return result;
else
return addNumbers(carry, result);
}
int main() {
int a = 54, b = 897;
printf("ผลรวมของ %d และ %d โดยการบวกบิตวายส์คือ %d", a, b, addNumbers(a, b));
return 0;
}
ผลลัพธ์
ผลรวมของ 54 และ 897 โดยการบวกบิตวายส์คือ 951