位运算操作

#include <stdio.h>

int main() {
int a = 3; // 二进制为 0000 0000 0000 0000 0000 0000 0000 0011
int b = 6; // 二进制为 0000 0000 0000 0000 0000 0000 0000 0110
int c = -4; // 二进制为 1111 1111 1111 1111 1111 1111 1111 1100 (绝对值取反加一)
// 位运算符有: & | ^ ~ << >> , 运算对象是 int 型 和 char 型
// 补位原则: 不同长度的数据之间进行位运算,将按右侧对齐的原则进行处理,即按长度较大的数据进行处理,将长度较小的数据在左侧进行补位。
// 例如:一个char型数据和一个int型数据进行位操作,先将char型数据左侧位补齐,再进行位运算。补位的原则是,对于正数和无符号数,左侧补0,对于负数,左侧补1。



// & : 与运算符 ,优先级:逻辑运算符和关系运算符之间,1+1=1,0+1=0,0+0=0;
// | : 或运算符,优先级:逻辑运算符和关系运算符之间, 1+1=1, 0+1=1; 0+0=0;
// ^ : 异或运算符,优先级:逻辑运算符和关系运算符之间, 1+1=0, 0+1=1; 0+0=1;
// ~ :取反运算符(优先级要高于算术运算符)0变1,变0



// << : 位移运算符,运算规则:左移 ,优先级: 关系运算符和算数运算符之间


// 5 << 2, 相当于把5的二进制 向左移动2位,后面补0,结果为int型的5乘2的2次方
// 5 << 3, 相当于把5的二进制 向左移动2位,后面补0,结果为int型的5乘2的3次方
// 5 << 4, 相当于把5的二进制 向左移动2位,后面补0,结果为int型的5乘2的4次方



// >> : 位移运算符 ,运算规则:右移 ,优先级: 关系运算符和算数运算符之间


// 5 >> 2, 相当于把5的二进制 向右移动2位,前面补0,结果为int型的5除2的2次方
// 5 >> 3, 相当于把5的二进制 向右移动2位,前面补0,结果为int型的5除2的3次方
// 5 >> 4, 相当于把5的二进制 向右移动2位,前面补0,结果为int型的5除2的4次方
printf("%d", a);
return 0;
}

原文地址:https://www.cnblogs.com/hello-dummy/p/9217052.html