针对编程二进制的考题,以下是一些解题思路和示例代码:
1. 二进制字符串求和
给定两个二进制字符串,返回他们的和(用二进制表示)。
思路:
1. 使两个字符串等长,若不等长,在短的字符串前补零。
2. 从后到前遍历所有的位数,同位相加,考虑进位。
3. 若相加后的字符大于等于字符 '2',则下一位需要进一。
示例代码:
```cpp
include include std::string addBinary(const std::string& a, const std::string& b) { int al = a.size(); int bl = b.size(); while (al < bl) { b = '0' + b; ++bl; } for (int j = a.size() - 1; j >= 0; --j) { char sum = (a[j] - '0') + (b[j] - '0') + (a[j] == '0' && b[j] == '0' ? 0 : 1); if (sum >= 2) { sum -= 2; ++j; } a[j] = sum + '0'; } return a; } int main() { std::string a = "11"; std::string b = "1"; std::cout << addBinary(a, b) << std::endl; // 输出: "100" a = "1010"; b = "1011"; std::cout << addBinary(a, b) << std::endl; // 输出: "10101" return 0; } ``` 2. 二进制数转字符串 给定一个介于 0 和 1 之间的实数,打印它的二进制表示字符串。 思路: 1. 使用循环和位运算将实数转换为二进制字符串。 2. 处理小数部分,将每一位小数转换为二进制并拼接。 示例代码: ```cpp include include include std::string printBinary(double num) { if (num == 0) return "0"; std::string res = ""; bool isNegative = false; if (num < 0) { isNegative = true; num = -num; } while (num > 0) { res += (num % 2 == 1 ? "1" : "0"); num /= 2; } if (isNegative) res += "-"; std::reverse(res.begin(), res.end()); return res; } int main() { double num = 0.625; std::cout << printBinary(num) << std::endl; // 输出: "0.101" return 0; } ``` 3. 从整数中取出某几位 编写一个函数 `getbits`,从一个32位的整数中取出某几位,即取出的这些位保留原值,其余位为0。 思路: 1. 使用位运算和循环来提取指定位置的位。 2. 将提取的位拼接成字符串或整数。 示例代码: ```cpp include int getbits(int value, int n1, int n2) { int mask = (1 << (n2 + 1)) - 1; int bits = (1 << n1) - 1; return (value & mask) >> (n2 - n1 + 1); } int main() { int value = 12345; int n1 = 5; int n2 = 10; std::cout << getbits(value, n1, n2) << std::endl; // 输出: 10 return 0; } ``` 4. 二进制文件处理 在C语言编程中,处理二进制文件通常涉及到打开、读取和写入二进制数据。 思路: 1. 使用 `fopen` 函数打开