ในปัญหานี้ เราได้ตัวเลขสองตัว งานของเราคือสร้างโปรแกรม C สำหรับการบวกจำนวนเต็มสองจำนวนแบบเรียกซ้ำแบบ Bitwise
ตรรกะในการหาผลรวมโดยใช้การดำเนินการของ Bitwise นั้นคล้ายกับที่เราเคยทำตอนเรียนอนุบาล ในการหาผลรวม เราเคยบวกเลขแต่ละหลัก และถ้ามีการพกพา เราจะบวกเลขหลักถัดไป
เราจะทำสิ่งเดียวกัน ค้นหาผลรวมโดยใช้ตัวดำเนินการ XOR และตรวจสอบการพกพาโดยใช้การดำเนินการ AND หากมีพกพาเราจะบวกกลับหมายเลขมิฉะนั้นจะไม่.
นี่คือตรรกะของ ครึ่งแอดเดอร์ ที่คุณอาจเคยเรียนมาในระบบดิจิตอลอิเล็คทรอนิคส์ อ้างอิงที่นี่…
ตอนนี้ผลรวมคำนวณโดยใช้ a^b นั่นคือ XOR b และเราจำเป็นต้องตรวจสอบการพกพาเพิ่มเติมที่จำเป็นต้องเผยแพร่หากมีการตั้งค่าบิตแรกของทั้งสอง และเราจำเป็นต้องเพิ่มชุดพิเศษให้กับตัวเลข
ดังนั้นอัลกอริทึมบิตจะเป็น
ขั้นตอนที่ 1 − ค้นหา XOR ของ a และ b เช่น a^b และเก็บไว้ในตัวแปรผลลัพธ์
ขั้นตอนที่ 2 − ตรวจสอบว่า {(a &b) <<1} ==0
ขั้นตอนที่ 2.1 − หากเท่ากับ 0 ให้พิมพ์ผลลัพธ์ ผลลัพธ์คือผลลัพธ์สุดท้าย
ขั้นตอนที่ 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 addNumbers(carry, result); } int main(){ int a = 54, b = 897; printf("The sum of %d and %d using bitwise adding is %d", a, b, addNumbers(a, b)); return 0; }
ผลลัพธ์
The sum of 54 and 897 using bitwise adding is 951’