>> >> >> Reference << << << <<<<<<Ref>>>>>>
Number System
Modified: 2025-12-31 | Author:ljf12825

进位计数制

Binary

Octal

Decimal

Hexadecimal

进制的转换

进制转换

方法1:

int BinarytoDecimal(const std::string& binary)
{

	int sum = 0;
	int position = binary.length() - 1;

	for (auto it : binary)
	{
		if (it == '0') {}
		else if (it == '1') sum += std::pow(2, position);
		else abort();
		--position;
	}
	
	return sum;
}

方法2:使用std::stoi(或std::stoll) std::stoi是C++11引入的标准库函数,可以将字符串转换为整数,支持不同的进制

std::stoi(binary, nullptr, 2); // 2 表示二进制

方法3:手动优化位运算

int BinarytoDecimal(const std::string& binary)
{
    int sum = 0;
    for (char c : binary) sum = (sum << 1) | (c - '0'); // 将sum左移,并加上当前二进制位,c - '0'是ASCII码相减
}

方法4:使用std::bitset std::bitset是C++标准库中的一个模板类,可以很方便地处理二进制数据。如果二进制字符串长度较小,或者只需要处理固定长度的二进制数,bitset是很好的选择

# include <bitset>
std::bitset<32> bits(binary); // 假设二进制字符串长度不超过32位
static_cast<int>(bits.to_ulong()); // 先转ulong,再转int

方法1:除2取余

std::string DecimaltoBinary(int decimal)
{
	if (decimal == 0) return "0";

	std::string binary;

	while (decimal > 0)
	{
		if (decimal % 2 == 1) binary.push_back('1');
		else binary.push_back('0');
        // 可优化为
        // binary.push_back((decimal % 2) + '0'); // int->char

		decimal /= 2;
	}
	std::reverse(binary.begin(), binary.end());
	return binary;
}

方法2:使用std::bitset

#include <bitset>
std::bitset<32> bits(decimal);
bits.to_string();

方法3:位运算

std::string DecimaltoBinary(int decimal)
{
    if (decimal == 0) return "0";

    std::string binary;
    while (decimal > 0)
    {
        binary.push_back((decimal & 1) + '0'); // 提取最低位
        decimal >>= 1; // 右移一位,相当于除以2
    }

    std::reverse(binary.begin(), binary.end()); 
    return binary;
}

方法4:递归

std::string DecimaltoBinary(int decimal)
{
    if (decimal == 0) return ""; // 递归基:当数字为0时返回空字符串

    return DecimaltoBinary(decimal / 2) + std::to_string(decimal % 2);
}

int main()
{
    int decimal = 13;
    std::string binary = DecimaltoBinary(decimal);
    if (binary.empty()) binary = "0"; // 处理0
    return 0;
}

方法1:按位映射

方法2:Hexadecimal -> Decimal -> Binary