#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.