Welcome

首页 / 软件开发 / 数据结构与算法 / 如何使用bitset实现二进制和十进制的相互转换

如何使用bitset实现二进制和十进制的相互转换2014-07-10 synapse7 一、相互转换

01.#include<cstdio>02.#include<cmath>03.#include<cstring>04.#include<cstdlib>05.#include<string>06.#include<bitset>07.using namespace std;08.const int Size = 32;09.10.char str[Size];11.12.int main(void)13.{14.int num;15.while (~scanf("%d", &num)) ///禁止输入负值!16.{17.///化成无符号2进制18.bitset<Size> bs(num);19.strcpy(str, bs.to_string().c_str());20.///注意算log要加上1e-921.for (int i = Size - (int)log2(num + 1e-9) - 1; i < Size; ++i)22.putchar(str[i]);23.putchar("
");24.25.///变回来方法126.string str2(str);27.bitset<32> bs2(str2);28.printf("%d
", bs2.to_ulong()); ///或者写%lud29.30.///变回来方法2,#include<cstdlib>31.printf("%d
", strtol(str, NULL, 2)); ///或者写%ld32.}33.return 0;34.}

二、生成0~2^k的二进制数

无前导零:

01.#include<cstdio>02.#include<string>03.using namespace std;04.const int maxn = 1 << 7;05.06.string bs;07.08.int main(void)09.{10.int i, ii;11.///无前导零12.for (i = 0; i < maxn; ++i)13.{14.ii = i;15.bs = "";16.do17.{18.bs = (ii & 1 ? "1" : "0") + bs;19.ii >>= 1;20.}21.while (ii);22.puts(bs.c_str());23.}24.return 0;25.}
有前导零:

01.#include<cstdio>02.#include<string>03.#include<bitset>04.using namespace std;05.const int Size = 4;06.const int maxn = 1 << Size;07.08.int main(void)09.{10.for (int i = 0; i < maxn; ++i)11.{12.bitset<Size> bs(i);13.puts(bs.to_string().c_str());14.}15.return 0;16.}