C++中二进制的两种写法

二进制的两种写法

常规写法
#include<cstdio>
#include<iostream>
using namespace std;
//整体思路:先把二进制转为十进制 

int string_to_num(string str)
{
	int len = str.length();//str.length()是c++中获取字符串长度的函数 
	int result = 0;
	for(int i = 0;i<len;++i){
		result = result*2 + (str[i] - '0');//字符串转十进制语句 
		                      // str[i] - '0'是为了把字符转成数字
							  //比如字符'1'-字符'0'=数字1; 
	}//字符串转数字,位权是多少乘以多少,
	 //比如在这里我们要把二进制转为十进制
	 //就用result = result*2 + (str[i] - '0');
	 //如果十进制转就*10,多少进制就*多少。 
	return result;
} 
int main()
{
    string num1,num2;
	char ch;
	cin >> num1 >> ch >>num2;
	long long a = string_to_num(num1);// string_to_num(num1)是自己定义的 
	long long b = string_to_num(num2);// 字符串转十进制函数 
	long long result;
	if(ch == '+'){//判断+-字符,执行相应的语句 
		result = a+b;
	}else{
		result = a-b;
	}
	if(result == 0){//特殊情况直接输出0,结束程序。 
		cout << 0 << endl;
		return 0;
	}
	int arr[10000],index = 0;
	while(result != 0){         // 
		arr[index] = result % 2;//用数组
		index++;                // 保存 
		result /= 2;            //二进制数 
	}
	for(register int i = index-1; i >= 0;--i){
		cout << arr[i];//循环语句输出二进制数 
	}
	cout << endl;
	return 0;
}
使用bitset的写法
#include<cstdio>
#include<iostream>
#include<bitset> //bitset函数头文件 
using namespace std;


int string_to_num(string str)
{
	int len = str.length(); 
	int result = 0;
	for(int i = 0;i<len;++i){
		result = result*2 + (str[i] - '0');
		                      
	}
	return result;
} 
int main()
{
    string num1,num2;
	char ch;
	cin >> num1 >> ch >>num2;
	long long a = string_to_num(num1);
	long long b = string_to_num(num2);
	long long result;
	if(ch == '+'){
		result = a+b;
	}else{
		result = a-b;
	}
	if(result == 0){
		cout << 0 << endl;
		return 0;
	}//bitset数组只能存0和1,即只能储存二进制数
	 //bitset函数的作用是自动把十进制数换成二进制数 
	bitset<64> bit(result);//64是定义的bit数组的长度,即表明bitset 的大小 
	register int index = 63;//bit(result)里面的result表示要转换的十进制数; 
	//过滤前导0 ,因为bitset函数储存二进制数是反向储存的 
	for( ; index>=0 && bit[index] == 0;--index){ }//如果为0,index就往后移一位 
	for( ; index>=0; --index){
		cout << bit[index];//输出过滤后的二进制数 
	} 
	cout << endl;
	return 0;
}
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值