在一些情况下,我们会在别人的代码中看到& 0xff,刚开始我也不知道为什么会有这个用法,查了一些资料后,学习如下。
首先,&表示按位与,只有两个位同时为1才能得到1;0x代表16进制数,0xff表示二进制1111 1111,8个位占一个字节。
在这里插入图片描述1. & 0xff的作用——保留低8位例如,有个数字 0x1234,如果只想将低8位写入到内存中,就需要用0x1234 & 0xff。
0x1234 表示成二进制是 0001 0010 0011 0100,0xff 表示成二进制是 1111 1111,高位补0就是 0000 0000 1111 1111。
因为1&0 =0, 1&1 =1,所以0x1234 & 0xff运算后,最低8位不会发生变化。
2. 常用十六进制数的处理在C++中,处理十六进制数可以使用一些内置的功能和方法。
字符串转换为十六进制数:使用 std::stoi 函数将字符串转换为十六进制数。
代码语言:javascript代码运行次数:0运行复制std::string hexString = "1A";
int decimal = std::stoi(hexString, nullptr, 16); // stoi的第三个参数16表示用16进制表示,8进制写8就行十进制数转换为十六进制字符串:使用 std::stringstream 类和 std::hex 输出格式来将十进制数转换为十六进制字符串。
代码语言:javascript代码运行次数:0运行复制int decimal = 26;
std::stringstream ss;
ss << std::hex << decimal; // 输出格式用hex表示,8进制用oct
std::string hexString = ss.str(); // 获取转换后的16进制字符串十六进制数的位操作:使用位运算符(例如按位与、按位或、按位异或)对十六进制数进行位操作。
代码语言:javascript代码运行次数:0运行复制int hexA = 0x0F; // 十六进制数 0x0F
int hexB = 0x32; // 十六进制数 0x32
int resultAnd = hexA & hexB; // 按位与
int resultOr = hexA | hexB; // 按位或
int resultXor = hexA ^ hexB; // 按位异或3. 常用十进制数的处理字符串转换为十进制数:使用 std::stoi 函数将字符串转换为十进制数。
代码语言:javascript代码运行次数:0运行复制std::string decimalString = "42";
int decimal = std::stoi(decimalString);十进制数转换为字符串:使用 std::to_string 函数将十进制数转换为字符串。
代码语言:javascript代码运行次数:0运行复制int decimal = 42;
std::string decimalString = std::to_string(decimal);十进制数的数学运算:常用的数学运算,这里就不多说了。
另外,二进制转十进制,可以使用 std::bitset 类和 std::to_string 函数将十进制数转换为二进制字符串。
代码语言:javascript代码运行次数:0运行复制int decimal = 42;
std::bitset<32> binary(decimal);
std::string binaryString = binary.to_string();以上。