c++中,二进制与十进制互相转换代码以及bitset的使用

c++中,二进制与十进制互相转换代码以及bitset的使用

十进制转二进制

辗转相除,除2取余,结果倒着取

//十进制化为二进制
int ts(int n)
{int s=0,j=1;
    while(n)
    {
        s=s+j*(n%2);
        n/=2;
        j=j*10;
    }
 return s;
}

二进制转为十进制

//二进制转化为十进制
int kt(int n)
{
	int s=0;
    stringstream ss;
    ss<<n;
    string str=ss.str();
    
    for(int i=0;i<sq.length();i++)
    {
        s*=2;
        s+=str[i]-'0';
    }
 return s;
}

bitset类的使用
bitset相当于一个只包含0、1的二进制数组。
头文件
#include< bitset >

用法
1、定义申明

bitset<4> a;  //定义长度为4的bitset变量a,默认a为全0,即a=0000;

bitset<8> b(12);   //定义长度为8的bitset变量b,括号中数12为要转化的十进制数
cout<<"b="<<b<<endl;   //结果 b=00001100;(12的二进制数为1100,扩充到长度8,前面位补0,0000 1100)

string str="10110
bitset<8> c(str);  //将二进制组成的字符串赋值给变量c,长度为8
cout<<str<<endl;  //00010110

注意!
1、用字符串构造时,字符串只能包含0、1
2、当给变量赋了长度时,若长度大于转换后的二进制位数,则在前面补0;若长度【2】不够,当参数为整数【1011】时取后面部分【11】;参数为字符串【“1011”】时取前面部分【10】
3、访问bitset时可用[ ]访问它的每一位
string s=“abcd”; s[0]=a;
int p[5]={0,1,2,3,4}; p[0]=0;
与字符串,数组的顺序【下标 从左往右 依次从0增大】不同;
bitset< 4 > a(10); //a=1010; a[0]=0; a[3]=1;
下标0从其最低位开始 【即从右往左,从后向前 依次从0增大】

相关函数

bitset<8> s("10011011");

s.count();	//5 返回s中1的个数,s中有5个
s.size();	//8 返回s的位数,s为8位
s.test(0);	//true 检查下标为0的元素(最低位)是0还是1,0返回flase,1返回true
s.any();	//true 检查s中是否有1
s.none();	//flase 检查s中是否没有1
s.all();	//flase 检查s中是否全为1

s.flip();	//01100100 不传参则将s的每一位取反
s.flip(2);	//10011111 传参则将s的下标为2处取反
s.set();	//11111111 不传参则将s的每一位 置1
s.set(3);	//10011011 传一个参数将s的下标为3的位 置1
s.set(3,0);	//10010011 传两个参数将s的下标为3的位 置0(第二个参数)
s.reset();	//00000000 不传参则将s的每一位 置0
s.reset(3);	//10010011 传参则将s的下标为3的位 置0

常用

s.set(); 将变量s各位全置1,得到全1串
s.reset(); 将变量各位全置为0,得到全0串
s.size(); 返回变量s的位数
c.count(); 返回变量s中1的个数
s.flip(); 将变量s的每一位取反

转换函数

bitset<8> t("10011011");

string s = t.to_string();	//将t转换成string型
unsigned long a = t.to_ulong();	//将t转换成unsigned long型
unsigned long long b = t.to_ullong();	//将t转换成unsigned long long型

你可能感兴趣的:(c++学习,c++,开发语言)