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

การบวกแบบบิตวายส์แบบเรียกซ้ำของสองจำนวนเต็มในภาษา C

ในปัญหานี้ เราได้รับสองตัวเลข งานคือสร้างโปรแกรม 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