CÁC PHÉP TOÁN TRÊN HỆ
NHỊ PHÂN (32 BIT)
Các bạn
lưu ý, mỗi phép toán nhị phân có thể có nhiều giải thuật khác nhau để áp dụng,
nhưng để đơn giản mình xin trình bày những giải thuật đơn giản nhất, dễ cài đặt
nhất.
Do vấn đề thời gian, mình xin trình bày source code trước, chi tiết phân
tích mình sẽ cập nhật sau.
PHÉP CỘNG
Trong 4 phép tính nhị
phân, phép cộng được xem là phép cơ bản nhất mà những phép tính sau cần tới,
các bạn sẽ hiểu rõ điều này sau khi đi qua tình phép tính.
Bạn có thể xem bài CỘNG NHỊ PHÂN BÀI PHÉP XOR
Ở đây mình xin giới thiệu một giải thuật đơn giản
khác.
Code (C++)
void CongNhiPhan(int
A[], int B[], int
KQ[])
{
int
Nho = 0;
int
Tam = 0;
for (int i = 32 - 1; i >= 0; i--)
{
Tam = A[i] + B[i] + Nho;
KQ[i] = Tam % 2;
Nho = Tam >> 1;
}
}
PHÉP TRỪ
Bản chất phép trừ là phép cộng hay ta có thể
hiểu như sau:
A - B = A + (-B)
Trong nhị phân (-B) chính là bù hai của B
Vậy ta có A – B = A +
BuHai(B);
PHÉP NHÂN
Trong 4 phép toán +, - , *,
/, thì mức độ trừu tượng, phức tạp giải thuật cũng tăng dần.
Code (C++)
void NhanNhiPhan(int A[32],int B[32],int KQ[])
{
int KQTam[32] = {};
int TamA[32] = {};
Gan(TamA,
A); // gán TamA = A
int K = 0;
for(K = 0; K < 32; K++)
if(B[K] == 1)
break;
for(int j = 31; j
>= K; j--)
{
if(B[j]==1)
{
cong(TamA, KQ,
KQTam);
Gan(KQ, KQTam);// gán KQ = KQTam
}
DichTrai(TamA, 1);
}
}
PHÉP
CHIA
Phép chia
là 1 bài toán khá thú vị, mình xin để lại cho các bạn suy nghĩ, mình sẽ cập nhật
phần này sau.
Ngựa Sông