位运算(16位带符号二进制

目录

一、运算符:

1.与 x&y:对应位均为1的时候才为1,否则为0

2.或 x|y:对应位均为0的时候才为0

3.异或^:同0异1

例题:

4.取反 ~x:逆转01位 

5.按左位移x<<1:

6.按右位移x>>1:

二、综合使用:

1.二进制转换

2.毒酒问题


一、运算符:

1.与 x&y:对应位均为1的时候才为1,否则为0

  用途:①测试某一位是0/1:   x&2==2?..........

             ②只保留某些位上的1

             ③把特定位上的数置0

2.或 x|y:对应位均为0的时候才为0

    用途基本同1(没有①;②③把1/0互换就行.

3.异或^:同0异1

    用途:①与全1异或——翻转0和1      与0异或——不变

               ②与自己异或——0

               ③与自己异或两次——不变

               ④互换xy的值:x=x^y;y=y^x(此时y=原来的x;x=x^y(此时x=原来的y。

例题:

位运算(16位带符号二进制_第1张图片

解析:将这n个正整数一起异或,相同的就相当于抵消掉了,最后的结果就是那个落单的那个

int n,result=0,x;

cin>>n;

for(int i=0;i>x;

result^=x;

}

cout<

4.取反 ~x:逆转01位 

5.按左位移x<<1

6.按右位移x>>1:

    无符号和有符号的正数:正常移动

   负数:补的数取决于所使用的系统(补0:逻辑右移;补1:算术右移

   这告诉我们:对负数进行位运算的时候,要注意是否要先变成无符号形式(unsigned

   用途:用来与2的n次方进行*/运算,加快效率(*2的n次方:1<

二、综合使用:

1.二进制转换

①n&1;n>>1;(从低位到高位即从末尾开始  也可以据此判奇偶

如果要对n进行位运算,应该是写n>>=1!!!!!气死了你个傻逼

(或者:n&(1<从高位到低位

②cout<<(n<

2.毒酒问题

位运算(16位带符号二进制_第2张图片

 解析:将酒按二进制编号,一共需要十位(2的十次方-1)

取十只老鼠,让每只老鼠喝对应位上为1的所有酒,最后每一位老鼠都能确定一个位上的数字。(类似于取交集:没死的老鼠证明没有喝到毒酒——毒酒这一位上是0才会没有喝到;死了的老鼠喝到了毒酒——因为这一位上是1所以被喝到了)

你可能感兴趣的:(c++)