C++中常用的位操作以及字节操作

C++ 中常用的一些位操作、字节操作

1. 位操作

符号描述运算规则
&两个位都为1时,结果才为1
|两个位都为0时,结果才为0
^异或两个位相同为0,相异为1
~取反0变1,1变0
<<左移各二进位全部左移若干位,高位丢弃,低位补0 (左移操作符将操作数的位向左移动指定的位数,右边补0。左移相当于对数字进行2的n次幂的乘法运算(n为移动的位数)。)
>>右移各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0 (逻辑右移)

较为常用的是移位操作。组合起来可以进行字节操作。

2. 字节操作

#include <iostream>

int main() {
    uint32_t num = 0x12345678;
    
    // 提取低位字节 (0x78)
    uint8_t lowByte = num & 0xFF;

    // 提取次低位字节 (0x56)
    uint8_t secondByte = (num >> 8) & 0xFF;

    // 提取次高位字节 (0x34)
    uint8_t thirdByte = (num >> 16) & 0xFF;

    // 提取高位字节 (0x12)
    uint8_t highByte = (num >> 24) & 0xFF;

    std::cout << "Low Byte: " << std::hex << (int)lowByte << std::endl;
    std::cout << "Second Byte: " << std::hex << (int)secondByte << std::endl;
    std::cout << "Third Byte: " << std::hex << (int)thirdByte << std::endl;
    std::cout << "High Byte: " << std::hex << (int)highByte << std::endl;

    return 0;
}

使用位操作进行字节提取的核心思想是通过**移位掩码**操作来访问特定位置的字节。

具体来说,位操作提取字节的核心思想包括以下几个步骤:

(1)右移:将目标字节移动到最右边(最低有效字节)的位置。

(2)掩码:使用掩码(mask)来屏蔽掉不需要的位,只保留目标字节。

具体操作
右移操作

右移操作符(>>)用于将一个数的所有位向右移动指定的位数。右移的位数通常是 (n * 8),其中 n 是目标字节的位置,从0开始计数,最右边的字节为0。例如,如果我们想要提取第3个字节(从右数),需要将数据右移24位。

掩码操作

掩码是一个二进制数,用于屏蔽不需要的位。最常用的掩码是 0xFF,即二进制的 11111111,它可以用来提取一个字节的所有位。通过与操作(&),可以保留掩码中为1的位,其他位都被清零。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值