📅  最后修改于: 2023-12-03 15:10:17.036000             🧑  作者: Mango
将一个十进制数转换成对应的二进制字符串是编程中常见的问题。在 c++ 中,有很多种方法可以实现这个功能。本文将介绍四种常用的方法。
c++ 中的 bitset 类可以非常方便地将一个数字转换成二进制字符串,只需要将数字作为构造函数的参数即可。示例代码如下:
#include <bitset>
#include <iostream>
using namespace std;
int main() {
int n = 10;
bitset<32> b(n);
string s = b.to_string();
cout << s.substr(s.find('1'));
return 0;
}
上述代码中,我们将数字 10 转换成一个 32 位的二进制数,再通过 bitset 的 to_string() 方法将其转换为一个字符串。代码中的 substr 函数则是将字符串中的前导零去除,以便于查看。
将数字转换成二进制字符串的另一种常见方法就是使用栈。我们将数字不断除以 2,得到的余数入栈,最后将栈中的元素一一出栈就可以得到对应的二进制字符串。示例代码如下:
#include <stack>
#include <iostream>
using namespace std;
int main() {
int n = 10;
stack<int> s;
while (n) {
s.push(n % 2);
n /= 2;
}
while (!s.empty()) {
cout << s.top();
s.pop();
}
return 0;
}
上述代码中,我们使用了两个栈,一个用于存放余数,一个用于存放二进制字符串。第一个 while 循环将每次的余数入栈,第二个 while 循环则将栈中的元素一一出栈并输出。
使用递归也是实现将数字转换成二进制字符串常见的方法。对于当前的数字 n,我们可以将其除以 2 得到商 k 和余数 r,再递归地将 k 转换成二进制字符串并将其与 r 拼接起来。示例代码如下:
#include <iostream>
using namespace std;
string to_binary(int n) {
if (n == 0) return "0";
int k = n / 2, r = n % 2;
return to_binary(k) + to_string(r);
}
int main() {
int n = 10;
cout << to_binary(n);
return 0;
}
上述代码中,我们定义了一个 to_binary 函数,用于将数字转换成二进制字符串。其中,当数字为 0 时,直接返回字符串 "0";否则,我们将其除以 2 得到商 k 和余数 r,再递归地调用 to_binary 函数将 k 转换成二进制字符串并将其与 r 拼接起来。
使用移位运算也可以实现将数字转换成二进制字符串的功能。我们从高位到低位依次取出每一位的值,可以将该数字不断右移 1 位并与 1 进行与运算,得到的结果就是该位的值。示例代码如下:
#include <iostream>
using namespace std;
int main() {
int n = 10;
string s = "";
for (int i = 31; i >= 0; --i) {
if ((n >> i) & 1) s += "1";
else s += "0";
}
cout << s.substr(s.find('1'));
return 0;
}
上述代码中,我们将数字右移 31 位到 0 位,并依次取出每一位的值,将其转换成对应的字符拼接成字符串。最后,我们再将字符串中的前导零去除以便于查看。