Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- void DoiBit(int a[32])
- {
- for (int i = 0; i < 32; ++i)
- {
- if (a[i] == 0)
- a[i] = 1;
- else
- a[i] = 0;
- }
- }
- void DecToBin(int n, int a[32])
- {
- for (int i = 0; i < 32; ++i)
- {
- a[i] = (n >> 31 - i) & 1;
- }
- }
- void DoiChuSangSo(char a[], int n)
- {
- for (int i = 0; i < n; ++i)
- {
- a[i] = a[i] - 48;
- }
- }
- int BinToDec(char a[32])
- {
- int x = 0;
- int n = strlen(a);
- DoiChuSangSo(a, n);
- for (int i = 0; i < n; ++i)
- {
- x += (a[i] << n - i - 1);
- }
- return x;
- }
- void Output(int a[], int n)
- {
- for (int i = 0; i < n; ++i)
- {
- cout << a[i];
- }
- }
- void CongBit(int a[32], int b[32], int c[32], int &nho)
- {
- nho = 0;
- for (int i = 31; i >= 0; --i)
- {
- int t = a[i] + b[i] + nho;
- if (t == 3)
- {
- c[i] = 1;
- nho = 1;
- }
- else if (t == 2)
- {
- c[i] = 0;
- nho = 1;
- }
- else if (t == 1)
- {
- c[i] = 1;
- nho = 0;
- }
- else
- {
- c[i] = 0;
- nho = 0;
- }
- }
- }
- void TruBit(int a[32], int b[32], int c[32])
- {
- int nho = 1;
- DoiBit(b);
- for (int i = 31; i >= 0; --i)
- {
- int t = a[i] + b[i] + nho;
- if (t == 3)
- {
- c[i] = 1;
- nho = 1;
- }
- else if (t == 2)
- {
- c[i] = 0;
- nho = 1;
- }
- else if (t == 1)
- {
- c[i] = 1;
- nho = 0;
- }
- else
- {
- c[i] = 0;
- nho = 0;
- }
- }
- }
- void ChuyenDoiBit(int a[32])
- {
- char bit[32];
- cout << "\nNhap day Bit: ";
- cin >> bit;
- int n = strlen(bit);
- int k = 31;
- for (int i = n - 1; i >= 0; i--)
- {
- a[k--] = bit[i] - 48;
- }
- }
- void GopMang(int c, int a[], int b[], int kq[])
- {
- int k = 0;
- kq[k++] = c;
- for (int i = 0; i < 32; ++i)
- {
- kq[k++] = a[i];
- }
- for (int i = 0; i < 32; ++i)
- {
- kq[k++] = b[i];
- }
- }
- void TachMang(int& c, int a[], int b[], int kq[])
- {
- int k = 0;
- kq[k++] = c;
- for (int i = 0; i < 32; ++i)
- {
- a[i] = kq[k++];
- }
- for (int i = 0; i < 32; ++i)
- {
- b[i] = kq[k++];
- }
- }
- void ShiftRight(int &nho, int a[], int b[])
- {
- int kq[65];
- GopMang(nho, a, b, kq);
- for (int i = 64; i > 0; --i)
- {
- kq[i] = kq[i - 1];
- }
- kq[0] = 0;
- TachMang(nho, a, b, kq);
- }
- void Nhandaybit(int m[], int b[], int kq[64])
- {
- int c = 0;
- int a[32] = { 0 };
- int k = 32;
- while (k > 0)
- {
- if (b[31] == 1)
- {
- CongBit(a, m, a, c);
- }
- ShiftRight(c, a, b);
- k--;
- }
- GopMang(c, a, b, kq);
- }
- void main()
- {
- int a[32] = { 0 };
- int b[32] = { 0 };
- int c[32] = { 0 };
- /*int nho;
- ChuyenDoiBit(a);
- ChuyenDoiBit(b);
- CongBit(a, b, c, nho);
- Output(c, 32);*/
- /*int nho;
- ChuyenDoiBit(a);
- ChuyenDoiBit(b);
- TruBit(a, b, c);
- Output(c, 32);*/
- /*int x;
- cout << "nhap x:";
- cin >> x;
- DecToBin(x, a);
- Output(a, 32);*/
- /*int x;
- char bit[32];
- cout << "\nNhap day bit can chuyen doi: " << endl;
- cin >> bit;
- x = BinToDec(bit);
- cout << x;*/
- int m[32] = { 0 };
- int q[32] = { 0 };
- int kq[65];
- ChuyenDoiBit(m);
- ChuyenDoiBit(q);
- Nhandaybit(m, q, kq);
- Output(kq, 65);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement