Advertisement
thinhckhcmus

Chuyển Đổi Cơ Số (Bằng Các Cách Dịch bit) TTN CODER

Oct 9th, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.96 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3.  
  4.  
  5.  
  6. void DoiBit(int a[32])
  7. {
  8. for (int i = 0; i < 32; ++i)
  9. {
  10. if (a[i] == 0)
  11. a[i] = 1;
  12. else
  13. a[i] = 0;
  14. }
  15.  
  16. }
  17.  
  18. void DecToBin(int n, int a[32])
  19. {
  20. for (int i = 0; i < 32; ++i)
  21. {
  22. a[i] = (n >> 31 - i) & 1;
  23. }
  24. }
  25.  
  26. void DoiChuSangSo(char a[], int n)
  27. {
  28. for (int i = 0; i < n; ++i)
  29. {
  30. a[i] = a[i] - 48;
  31. }
  32. }
  33.  
  34. int BinToDec(char a[32])
  35. {
  36. int x = 0;
  37. int n = strlen(a);
  38. DoiChuSangSo(a, n);
  39. for (int i = 0; i < n; ++i)
  40. {
  41. x += (a[i] << n - i - 1);
  42. }
  43. return x;
  44. }
  45.  
  46. void Output(int a[], int n)
  47. {
  48. for (int i = 0; i < n; ++i)
  49. {
  50. cout << a[i];
  51. }
  52. }
  53.  
  54. void CongBit(int a[32], int b[32], int c[32], int &nho)
  55. {
  56. nho = 0;
  57. for (int i = 31; i >= 0; --i)
  58. {
  59. int t = a[i] + b[i] + nho;
  60. if (t == 3)
  61. {
  62. c[i] = 1;
  63. nho = 1;
  64. }
  65. else if (t == 2)
  66. {
  67. c[i] = 0;
  68. nho = 1;
  69. }
  70. else if (t == 1)
  71. {
  72. c[i] = 1;
  73. nho = 0;
  74. }
  75. else
  76. {
  77. c[i] = 0;
  78. nho = 0;
  79. }
  80. }
  81. }
  82.  
  83. void TruBit(int a[32], int b[32], int c[32])
  84. {
  85. int nho = 1;
  86. DoiBit(b);
  87. for (int i = 31; i >= 0; --i)
  88. {
  89. int t = a[i] + b[i] + nho;
  90. if (t == 3)
  91. {
  92. c[i] = 1;
  93. nho = 1;
  94. }
  95. else if (t == 2)
  96. {
  97. c[i] = 0;
  98. nho = 1;
  99. }
  100. else if (t == 1)
  101. {
  102. c[i] = 1;
  103. nho = 0;
  104. }
  105. else
  106. {
  107. c[i] = 0;
  108. nho = 0;
  109. }
  110. }
  111. }
  112.  
  113. void ChuyenDoiBit(int a[32])
  114. {
  115. char bit[32];
  116. cout << "\nNhap day Bit: ";
  117. cin >> bit;
  118. int n = strlen(bit);
  119. int k = 31;
  120. for (int i = n - 1; i >= 0; i--)
  121. {
  122. a[k--] = bit[i] - 48;
  123. }
  124. }
  125.  
  126.  
  127.  
  128. void GopMang(int c, int a[], int b[], int kq[])
  129. {
  130. int k = 0;
  131. kq[k++] = c;
  132. for (int i = 0; i < 32; ++i)
  133. {
  134. kq[k++] = a[i];
  135. }
  136. for (int i = 0; i < 32; ++i)
  137. {
  138. kq[k++] = b[i];
  139. }
  140. }
  141.  
  142. void TachMang(int& c, int a[], int b[], int kq[])
  143. {
  144. int k = 0;
  145. kq[k++] = c;
  146. for (int i = 0; i < 32; ++i)
  147. {
  148. a[i] = kq[k++];
  149. }
  150. for (int i = 0; i < 32; ++i)
  151. {
  152. b[i] = kq[k++];
  153. }
  154. }
  155.  
  156. void ShiftRight(int &nho, int a[], int b[])
  157. {
  158. int kq[65];
  159. GopMang(nho, a, b, kq);
  160. for (int i = 64; i > 0; --i)
  161. {
  162. kq[i] = kq[i - 1];
  163. }
  164. kq[0] = 0;
  165. TachMang(nho, a, b, kq);
  166. }
  167.  
  168. void Nhandaybit(int m[], int b[], int kq[64])
  169. {
  170. int c = 0;
  171. int a[32] = { 0 };
  172. int k = 32;
  173. while (k > 0)
  174. {
  175. if (b[31] == 1)
  176. {
  177. CongBit(a, m, a, c);
  178. }
  179. ShiftRight(c, a, b);
  180. k--;
  181. }
  182. GopMang(c, a, b, kq);
  183. }
  184. void main()
  185. {
  186. int a[32] = { 0 };
  187. int b[32] = { 0 };
  188. int c[32] = { 0 };
  189. /*int nho;
  190. ChuyenDoiBit(a);
  191. ChuyenDoiBit(b);
  192. CongBit(a, b, c, nho);
  193. Output(c, 32);*/
  194.  
  195. /*int nho;
  196. ChuyenDoiBit(a);
  197. ChuyenDoiBit(b);
  198. TruBit(a, b, c);
  199. Output(c, 32);*/
  200.  
  201. /*int x;
  202. cout << "nhap x:";
  203. cin >> x;
  204. DecToBin(x, a);
  205. Output(a, 32);*/
  206.  
  207. /*int x;
  208. char bit[32];
  209. cout << "\nNhap day bit can chuyen doi: " << endl;
  210. cin >> bit;
  211. x = BinToDec(bit);
  212. cout << x;*/
  213.  
  214. int m[32] = { 0 };
  215. int q[32] = { 0 };
  216. int kq[65];
  217. ChuyenDoiBit(m);
  218. ChuyenDoiBit(q);
  219. Nhandaybit(m, q, kq);
  220. Output(kq, 65);
  221.  
  222. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement