基于算法竞赛的c++编程(22)二进制,十进制,16进制
以下是关于二进制、十进制和十六进制在C++中的转换与操作方法:
十进制与其他进制的转换
C++标准库提供了将十进制转换为其他进制的方法:
#include <iostream>
#include <bitset>
#include <iomanip>int main() {int num = 255;// 十进制转二进制std::bitset<8> binary(num);std::cout << "Binary: " << binary << std::endl;// 十进制转十六进制std::cout << "Hexadecimal: 0x" << std::hex << num << std::endl;// 十进制转八进制std::cout << "Octal: 0" << std::oct << num << std::endl;return 0;
}
其他进制转十进制
使用std::stoi
等函数可以处理不同进制字符串:
#include <string>int main() {// 二进制字符串转十进制std::string binary_str = "11111111";int decimal1 = std::stoi(binary_str, nullptr, 2);// 十六进制字符串转十进制std::string hex_str = "FF";int decimal2 = std::stoi(hex_str, nullptr, 16);return 0;
}
格式化输出控制
使用<iomanip>
控制输出格式:
#include <iostream>
#include <iomanip>int main() {int num = 255;std::cout << std::setw(10) << std::setfill('0') << std::dec << num << std::endl;std::cout << std::showbase << std::hex << num << std::endl;return 0;
}
位操作
二进制位操作直接处理底层数据:
unsigned char a = 0b10101010;
unsigned char b = 0b01010101;// 与操作
unsigned char result_and = a & b;// 或操作
unsigned char result_or = a | b;// 异或操作
unsigned char result_xor = a ^ b;// 位移操作
unsigned char left_shift = a << 1;
unsigned char right_shift = a >> 1;
进制间转换算法
不使用标准库的转换算法示例:
#include <string>
#include <algorithm>std::string decimalToBinary(int n) {std::string binary;while(n > 0) {binary += (n % 2) + '0';n /= 2;}std::reverse(binary.begin(), binary.end());return binary;
}int binaryToDecimal(const std::string& binary) {int decimal = 0;for(char c : binary) {decimal = decimal * 2 + (c - '0');}return decimal;
}