//
// Created by someb on 2024/2/2.
//测试位运算符的使用
/*
* << >> & | ^(异或) ~
*
* 1.位运算符针对的是整型数值做的运算
* 2.位运算比四则运算速度快
*
* 高效的方式计算2 * 8 的值(经典面试题)
* answer:2 << 3 或 8<<1
*/
#include<stdio.h>
int main(){
int m1 = 3;
printf("%d\n",m1 << 1);
printf("9 & 7 = %d\n",9 & 7);
printf("9 | 7 = %d\n",9 | 7);
printf("~9 = %d\n",~9);
printf("~-10 = %d\n",~-10);
/*
* 练习:特定位清零
* 示例:设字符型x的当前值为53,将其最低俩位清0,其余位保持不变
* 分析:与二进制的0b11111100数值求&运算即可
*/
char x1 = 53; //0b00110101
x1 = x1 & 0b11111100;
printf("%d\n",x1);
/*
* 举例:判断特定位是否为0
* 技巧:待判定位与1,其它位为0,判与运算结果是否为0
* 示例:设字符型x的当前值为53,判定其最高位是否为0
* 分析:与二进制的0b10000000求&运算,若结果为0,则最高位为0,否则为1
*/
char x2 = 53;
x2 = x2 & 0b10000000;
if(x2 == 0)
printf("最高位为0\n");
else
printf("最高位为1\n");
/*
* 举例:保留特定位
* 技巧:待保留位全部与1,其余位为0
* 示例:设字符型x的当前值为53,保留其低4位,其余位清零
* 分析:与二进制的0b00001111求&运算即可
*/
char x3 = 53;
x3 = x3 & 0b00001111;
printf("%d\n",x3);
/*
* 举例:待置 1 或 1 ,保持位为0
* 示例:设字符型x的当前值为53,将其最低俩位置1,其余位保持不变
* 分析:与二进制0b00000011求或运算
*/
char x4 = 53;
x4 = x4 | 0b00000011;
printf("%d\n",x4);
/*
* 举例:特定位取反
* 待取反位异或1,保持位异或0
* 示例:设字符x的当前值为53,将其最低俩位取反,其余位保持不变
* 分析:与二进制0b00000011求异或运算
*/
int x5 = 53;
x5 = x5 ^0b00000011;
printf("%d\n",x5);
return 0;
}
执行结果
6
9 & 7 = 1
9 | 7 = 15
~9 = -10
~-10 = 9
52
最高位为0
5
55
54
Process finished with exit code 0