📅  最后修改于: 2023-12-03 14:52:15.007000             🧑  作者: Mango
有时候我们需要从一个字节中提取某一位的值,比如说对一个字节进行位运算处理。C++ 提供了一些位运算符来实现这个目的。
在 C++ 中,我们可以使用位运算符来提取一个位,最常见的位运算符是按位与(&
)和按位或(|
)。具体来说,我们先将要提取的位与一个数值进行按位与运算,得到的结果是将这个位上的值提取出来。例如,如果我们要提取字节 0x8A
的第 3 位(从右往左数第三位),我们可以这么做:
unsigned char b = 0x8A;
unsigned char mask = 0x04; // 定义掩码,即只有第 3 位是 1,其它位都是 0
unsigned char bit = b & mask; // 按位与运算,提取第 3 位的值
现在 bit
的值是 0x00
或 0x04
,分别对应第 3 位是 0 或 1。
除了按位与和按位或,我们还可以使用位移运算符来提取一个位。位移运算符会将一个数值按指定的位数向左或向右移动,移动之后,原来的位就被移除,而在新的位置插入一些新的位。我们可以使用左移运算符(<<
)或右移运算符(>>
)来实现这个目的。具体来说,我们可以使用左移运算符将要提取的位移到左边最高位,然后再将这个数值右移回来,这样就可以得到要提取的位的值。例如,如果我们要提取字节 0x8A
的第 3 位,我们可以这么做:
unsigned char b = 0x8A;
unsigned char bit = (b >> 2) & 1; // 将第 3 位移到最高位,再将其余位清零,然后按位与运算
现在 bit
的值是 0x00
或 0x01
,分别对应第 3 位是 0 或 1。
通过使用位运算符和位移运算符,我们可以在 C++ 中从一个字节中提取一个位。无论你使用哪种方法,都需要定义一个掩码来表示要提取的位是 1 还是 0。这个掩码可以通过位移运算符和按位或运算符来创建,例如 0x01 << n
就是一个只有第 n
位是 1,其余位都是 0 的掩码。