int a = 5; // 二进制表示为 101 int b = 3; // 二进制表示为 011 int c = a & b; // 按位与结果为 001,即 1在这个示例中,a 和 b 的二进制位都是三位数,因为它们都是 int 类型,所以 C语言会自动把它们扩展到 32 位。然后,按位与操作符(&)对每一位进行比较,最后得到一个结果,结果的二进制位中,只有在 a 和 b 的相应位置都为 1 时才为 1。
int a = 5; // 二进制表示为 101 int b = 3; // 二进制表示为 011 int c = a | b; // 按位或结果为 111,即 7在这个示例中,a 和 b 的二进制位都是三位数,因为它们都是 int 类型,所以 C语言会自动把它们扩展到 32 位。然后,按位或操作符(|)对每一位进行比较,最后得到一个结果,结果的二进制位中,只要在 a 和 b 的相应位置有一个为 1 时就为 1。
int a = 5; // 二进制表示为 101 int b = 3; // 二进制表示为 011 int c = a ^ b; // 按位异或结果为 110,即 6在这个示例中,a 和 b 的二进制位都是三位数,因为它们都是 int 类型,所以 C语言会自动把它们扩展到 32 位。然后,按位异或操作符(^)对每一位进行比较,最后得到一个结果,结果的二进制位中,只有在 a 和 b 的相应位置不相同时才为 1。
int a = 5; // 二进制表示为 101 int b = ~a; // 按位取反结果为 11111111111111111111111111111010,即 -6在这个示例中,a 的二进制位是三位数,因为它是 int 类型,所以 C语言会自动把它扩展到 32 位。然后,按位取反操作符(~)将 a 的每一位都取反,最后得到一个结果。
int a = 5; // 二进制表示为 101 int b = a << 2; // 左移两位结果为 10100,即 20在这个示例中,a 的二进制位是三位数,因为它是 int 类型,所以 C语言会自动把它扩展到 32 位。然后,左移操作符(<<)将 a 的所有位向左移动两位,最后得到一个结果。
int a = 20; // 二进制表示为 10100 int b = a >> 2; // 右移两位结果为 101,即 5在这个示例中,a 的二进制位是五位数,因为它是 int 类型,所以 C语言会自动把它扩展到 32 位。然后,右移操作符(>>)将 a 的所有位向右移动两位,最后得到一个结果。
int a = -20; // 二进制表示为 11111111111111111111111111101100 int b = a >> 2; // 右移两位结果为 11111111111111111111111111111011,即 -5在这个示例中,a 是一个负数,右移时会在左边填充 1,因此最后得到的结果也是一个负数。
struct { unsigned int is_deleted : 1; // 标志位,表示是否删除 unsigned int is_locked : 1; // 标志位,表示是否锁定 unsigned int reserved : 30; // 预留位 } status;在这个例子中,status 结构体包含三个位字段,is_deleted 和 is_locked 都是 1 位长的标志位,reserved 是 30 位长的预留位。
unsigned char value = 0xAB; // 10101011 unsigned char mask = 0x0F; // 00001111 unsigned char result = value & mask; // 00001011,即 11在这个例子中,我们定义了一个掩码 0x0F,它的二进制表示为 00001111。然后,我们将 value 和 mask 进行按位与运算,得到的结果只包含 value 的低 4 位,即 00001011。
unsigned char value = 0xAB; // 10101011 unsigned char mask = 0xF0; // 11110000 unsigned char result = value & mask; // 10100000在这个例子中,我们定义了一个掩码 0xF0,它的二进制表示为 11110000。然后,我们将 value 和 mask 进行按位与运算,得到的结果只包含 value 的高 4 位,即 10100000。
#define FLAG1 0x01 // 标志位1 #define FLAG2 0x02 // 标志位2 #define FLAG3 0x04 // 标志位3 #define FLAG4 0x08 // 标志位4 unsigned char flags = 0; flags |= FLAG1; flags |= FLAG3; if (flags & FLAG1) { // 处理标志位1 } if (flags & FLAG2) { // 处理标志位2 } if (flags & FLAG3) { // 处理标志位3 } if (flags & FLAG4) { // 处理标志位4 }在这个例子中,我们使用位运算将四个标志位压缩到一个字节中。首先,我们定义了四个标志位,它们分别占据了一个字节中的不同位置。然后,我们使用按位或运算将 FLAG1 和 FLAG3 设置为 1,表示这两个标志位被激活。
本文链接:http://task.lmcjl.com/news/15219.html