*请与c++零基础知识要点整理(5)搭配使用
位与运算符的应用:&(有零为零)
(1)奇偶性判断: (位与法)
一个数位与上1,结果为1则为奇数,结果为0则为偶数
例:cout<<(5&1)<<endl;//5的二进制表示:0b101与1位与即:0b101&0b001=1,则该数为奇数,同时需注意的是输出5&1的结果时要加括号,因为&优先级别低。
补充其他方法:(取模法)一个数对2取模,结果为1则为奇数,结果为0则为偶数
例:cout<<5%2<<endl;//5%2=1,奇数。
(2)获取一个二进制的后几位
int a=0b101011001101;//(以获取一个二进制后位4位举例)
cout<<(a&0b1111)<<endl;//需要获取4位,则将该数二进制则与0b1111进行位与运算
以此类推:需要获取5位,则将该数与0b11111进行位与运算等等
(3)将一个二进制数的末几位归零
int a=0b101011001101;//(以将一个二进制数的末4位归零举例)
cout<<(a&0b11111111111111111111111111110000)<<endl;//注意*将末尾归零不仅仅是将a&0b0000这么简单粗暴,因为整型在进行运算时会自动在前面补0,此处补零的个数:32(位)-4(将4位归零),int(整型)在计算机中占4字节,则表示为32位。
//同理此处的a在计算机内部运算时的表示为:0b00000000000000000000101011001101
(4)消除末尾连续的1
int a=0b101011001111;
第一种:cout<<(a&0b11111111111111111111111111110000)<<endl;//(3)的方法
第二种:cout<<(a&(a+1))<<endl;//将该数二进制与该数二进制数加1进行位与
(5)2的幂的判断
int a=0b100000000;
则:a-1=0b011111111;a&(a-1)=0b000000000;
判定一个数是否为2的幂:if( (a>0&&(a&(a-1)))==0)即可