十进制转换为二进制

string MySystem::DecToBinary(int n)
{
	//因为要处理负数的情况,且负数和正数的不对称性,所以需要将其转换为大数

	//第一种,我们可以使用常规的方法来求解,即取2的模数,然后除以2.....如此循环,得到结果
	long long Temp = static_cast<long long>(n);
	if (Temp<0)
	{
		//处理补码的情况
		Temp = UINT_MAX + n + 1;
	}
	string Result("");
	while (Temp)
	{
		Result += (Temp % 2 + '0');
		Temp /= 2;
	}
	//翻转字符串
	int i = 0;
	int j = Result.size() - 1;
	while (i<j)
	{
		swap(Result[i], Result[j]);
		++i;
		--j;
	}
	return Result;
	//第二种方法可以使用位移操作
	//逐个判断每位上的数字
// 	long long Temp = static_cast<long long>(n);
// 	if (Temp<0)
//  	{
//  		//处理补码的情况
//  		Temp = UINT_MAX + n + 1;
// 	}
// 	string Result("");
// 	while (Temp)
// 	{
// 		if (Temp&0x01)
// 		{
// 			Result += '1';
// 		}
// 		else
// 		{
// 			Result += '0';
// 		}
// 		Temp >>= 1;
// 	}
// 	//翻转字符串
// 	int i = 0;
// 	int j = Result.size() - 1;
// 	while (i<j)
// 	{
// 		swap(Result[i], Result[j]);
// 		++i;
// 		--j;
// 	}
// 	return Result;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值