Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Cộng hai số nguyên không dùng toán tử số học trong C/C++

Dưới đây là ví dụ cộng hai số chỉ dùng phép toán bitwise:

Ví dụ

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

int add(int val1, int val2) {
    while (val2 != 0) {
        int carry = val1 & val2;     // Các bit carry
        val1 = val1 ^ val2;          // Cộng không nhớ (XOR)
        val2 = carry << 1;          // Dịch carry sang trái 1 bit
    }
    return val1;
}

int main() {
    cout << "Tong hai so: " << add(28, 8);
    return 0;
}

Kết quả

Tong hai so: 36

Giải thích thuật toán:

  1. carry = val1 & val2: Xác định các vị trí bit có cả hai đều là 1 (sẽ sinh nhớ).
  2. val1 = val1 ^ val2: Thực hiện cộng không nhớ (XOR: 0+0=0, 1+0=1, 0+1=1, 1+1=0).
  3. val2 = carry << 1: Dịch các bit nhớ sang trái 1 vị trí (nhân 2) để cộng vào lần sau.
  4. Lặp lại cho đến khi không còn carry (val2 == 0).

Đây là mô phỏng cách bộ vi xử lý thực hiện phép cộng tại cấp độ phần cứng.