问题背景
熟悉C语言的大概都知道,在C语言里可以用printf中的 %o %x %d 来分别输出 8 进制、16进制、10进制的数,但唯独不支持二进制。
因此用C++的时候潜意识里也认为转二进制需要自己造轮子,于是为了一道题自己写了半天。之后偶然发现原来在C++里,你可以愉快的使用bitset这个库来完成你的需求。
下面就来介绍一下 bitset 的使用方法,很简单很好记,在比赛时可以大大加快你的解题速度。
正文
- 首先当然是引入 bitset 了...
include <bitset>
2. 常用方法
bitset<n> b; //b有n位,每位都为0
bitset<n> b(u); //b是unsigned long型u的一个副本
bitset<n> b(s); //b是string对象s中含有的位串的副本
bitset<n> b(s, pos, n); //b是s中从位置pos开始的n个位的副本
注意:bitset 将传入参数转化为二进制补码形式。
3. 输出
输出时用to_string(),转为字符串输出。
举个 :
#include <iostream>
#include <string>
#include <bitset>
using namespace std;
int main(int argc, char const *argv[]){
bitset<8> n(15);
cout<<n.to_string()<<endl;
bitset<8> b(-13);
cout<<b.to_string()<<endl;
return 0;
}
输出结果:
00001111
11110011
拓展
看完了二进制,我们再拓展一下看看其它进制在C++中如何输出,毕竟OJ中很多题目都涉及到进制转换表示,掌握这些诀窍,对自己的解题速度的提升还是有帮助的。
#include<iostream>
using namespace std;
int main(int argc, char const *argv[]){
int n = 42;
cout<<n<<endl;
cout<<hex<<n<<endl; // 输出 16 进制
cout<<oct<<n<<endl; // 输出 8 进制
return 0;
}
输出结果:
42
2a
52