#include <iostream>
//这是位与 是用来操作二进制的
using namespace std;
int main() {
//1.位与运算符的定义:位数与位数对应 数字相同即为1 不同为0 就比如a,b最后一位都是1 那么a&b的最后一位就是1
int a = 0b00101; //0b表示二进制的意思 这个时候a表示十进制的5
int b = 0b01111; //b表示十进制的15
//a&b的结果应该是00101 对应十进制就是5
cout<< (a&b) <<endl; //输出结果为5
//2.奇偶性:判断a是一个奇数还是偶数-------一个方法是可以进行取模 看余数是否为1------另一个方法是用位与 这样子更加高效
//我们可以a&b 也就是a与1位与 然后用 与&&1 如果是奇数就会输出1 偶数输出0
//这是用到了奇偶二进制的特性以及“与”的特性 对于奇偶二进制 奇数最后一位都会是1 偶数最后一位是0 那么和1(00001位与)后 就会得到一个非0即1的数
a = 0b00101; //十进制:5
b = 0b00001; //十进制:1
cout<< (a & b) <<endl; //输出结果是1
//3.获取一个数(a)二进制的后五位:运用了位与的有0则0的特性 既然要获取的是后五位 那么前面的位数都设置成0 这样子就获取不到了 后面的设置成1 不会改变要获取的数
a = 0b0010010101010;
b = 0b00000000000000000000000000011111; //先打出32个0 这是int类型能表示的最多位数 然后把要表示的后五位全部改成1
//a&b的结果应该是01010 对应十进制是10 那么就会输出10
cout<< (a & b) <<endl;
//其实也可以直接这样子
cout<< (a & 0b11111) <<endl;
//4.将后五位归零:根据上面的经验 我们可以弄好多的1 然后最后五位弄成0
a = 0b001000100100111100; //后五位是11100
b = 0b11111111111111111111111111100000; //这是用了好多1的方法
cout<< (a & b) <<endl; //输出应该是一个很大的数了
//5.消除末尾连续的1:消除连续的1 那么最靠前的一个1前面应该是0
a = 0b110111111; //我们可以进行b = a + 1;操作 这样子b = 0b111000000 然后进行位与 就可以了
b = a + 1;
cout<< (a & b) <<endl; //输出结果应该是很大的
//6.判断一个数是否是2的幂:其实用眼睛看二进制就知道2的幂的二进制都是100000....的 那我们也可以这样子操作
a = 0b100000;
b = a - 1; //这样子两个数就反转了 位与得到的结果就会是0
cout<< (a & b) <<endl;
}
c++逻辑运算符--位与
于 2024-09-19 15:53:05 首次发布