1 thg 4, 2014

CÁC PHÉP TOÁN TRÊN HỆ NHỊ PHÂN (32 BIT)

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