//1个字节是八位二进制数
int a = 010 + 010;//0开头表示8进制, 0b开头表示二进制, 0x开头表示十六进制
printf("%d\n", a);//%d打印10进制整数, %x打印十六进制整数, %o打印八进制整数
//按位与& (同为1则为1, 否则为0)
printf("%d\n", 7 & 5);
//按位或| (只要有一个为1, 则为1, 否则为0)
printf("%d\n", 3 | 5);
//按位非~ ()
printf("%d\n", ~3);
//按为异或 ^ (相同为0, 不同为1)
printf("%d\n", 3^5);
//左移 << (左移一位相当于乘2)
printf("%d\n", 2 << 2);
//右移 >> (右移一位相当于除2)
printf("%d\n", 16 >> 1);
//二进制数的高四位与低四位互换
unsigned char b = 130;
unsigned char left = 0;//存储左移之后的结果
unsigned char right = 0;//存储左移之后的结果
left = b << 4;
right = b >> 4;
printf("%d\n", left | right);
//二进制数的奇偶位互换
//若想做清0操作, 使用按位与, 清0位为0, 保留位为1
unsigned char c = 0b10110111;//交换之后为 01111011
//1 先左移一位
//2 保存偶数位, 将奇数位清0
//3 右移一位
//4 保存基数位, 将偶数位清0
//5 按位或
unsigned char left1 = 0;//存储左移之后的结果
unsigned char right1 = 0;//存储又移之后的结果
left1 = c << 1;
left1 = left1 & 0b10101010;
right1 = c >> 1;
right1 = right1 & 0b01010101;
printf("%d\n", left1 | right1);