Binary and Decimal

#include <iostream> using namespace std; // Tên hàm: chuyển từ nhị phân sang thập phân (giới hạn 10 bit). // Đầu vào: 1 số nhị phân 10 bit -> char // Đầu ra: 1 số thập phân tương ứng -> short (vì phạm vi -512 -> 511) short fromBin(char s[11]) { short result = 0, // Kết quả. factor = 1, // Nhân 2 sau mỗi lần qua trái. i = 9; // Đi từ phải qua trái. for (; i >= 0; factor *= 2) result += (s[i--] - '0') * factor; // Phần tử đầu tiên quyết định dấu (trừ 512). return result + (0 - (s[0] == '1')) * factor; } // Tên hàm: chuyển từ thập phân sang nhị phân (giới hạn 10 bit). // Đầu vào: 1 số thập phân -> short (vì phạm vi cho phép là từ -512 -> 511). // Đầu ra: không có -> void. void decToBin(short num) { bool binary[10]; // chỉ lưu 1 và 0. // Dương thì chia 2 lấy dư rồi đạo ngược vị trí. if (num > 0) for (short i = 9; i >= 0; i--, num /= 2) binary[i] = num % 2; // Âm thì tương tự nhưng sau khi đảo vị trí thì cộng thêm 1. else { num *= -1; for (short i = 9; i >= 0; i--, num /= 2) binary[i] = 1 - num % 2; // Cộng 1. for (short i = 9; i >= 0; i--) if (binary[i] == 1) binary[i] = 0; else { binary[i] = 1; break; } } // Xuất. for (short i = 0; i < 10; i++) cout << binary[i]; } // Tên hàm: cộng 2 số nhị phân (giới hạn 10 bit). // Đầu vào: 2 số nhị phân 10 bit -> long // Đầu ra: không có -> void. void add(long a, long b) { int i = 0, leftover = 0, // Lưu số lần "mượn" 1. sum[10]; while (a != 0 || b != 0) { // Chỉ lấy 1 hoặc 0. sum[i++] = (a % 10 + b % 10 + leftover) % 2; // Mượn 1 nếu là 1 + 1. leftover = (a % 10 + b % 10 + leftover) / 2; a /= 10; b /= 10; } // Đôn thêm 1 hàng nếu còn dư 1 sau khi đã cộng hết lượt. if (leftover != 0) sum[i++] = leftover; --i; // Xuất. while (i >= 0) cout << sum[i--]; cout << endl; } // Tên hàm: trừ 2 số nhị phân (giới hạn 10 bit). // Đầu vào: 2 số nhị phân 10 bit -> long // Đầu ra: không có -> void. void subtractBinary(char a[11], char b[11]) { // Biến sang thập phân rồi trừ rồi biến lại về nhị phân. decToBin(fromBin(a) - fromBin(b)); } // Tên hàm: nhân 2 số nhị phân (giới hạn 10 bit). // Đầu vào: 2 số nhị phân 10 bit -> long // Đầu ra: không có -> void. void multiplyBinary(char a[11], char b[11]) { // Biến sang thập phân rồi nhân rồi biến lại về nhị phân. decToBin(fromBin(a) * fromBin(b)); } // Tên hàm: chia 2 số nhị phân (giới hạn 10 bit). // Đầu vào: 2 số nhị phân 10 bit -> long // Đầu ra: không có -> void. void divideBinary(char a[11], char b[11]) { // Biến sang thập phân rồi chia rồi biến lại về nhị phân. decToBin(fromBin(a) / fromBin(b)); } int main() { char a[] = "0000010101", b[] = "0000001010"; long c = 1110101, d = 1000010; short k = 269; cout << "So nhi phan tuong ung voi " << k << " la: "; decToBin(k); cout << "\nSo thap phan tuong ung voi " << a << " la: " << fromBin(a) << endl; cout << c << " + " << d << " = "; add(c, d); cout << a << " - " << b << " = "; subtractBinary(a, b); cout << endl << a << " * " << b << " = "; multiplyBinary(a, b); cout << endl << a << " / " << b << " = "; divideBinary(a, b); cout << endl; return 0; }

Be the first to comment

You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.