位运算(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。

例题:

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

int n,result=0,x;

cin>>n;

for(int i=0;i<n;++i) 

{cin>>x;

result^=x;

}

cout<<result;

4.取反 ~x:逆转01位 

5.按左位移x<<1

6.按右位移x>>1:

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

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

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

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

二、综合使用:

1.二进制转换

①n&1;n>>1;(从低位到高位即从末尾开始(与二进制码相反)   也可以据此判奇偶  

有多少输出多少个数字  

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

(或者:n&(1<<i[i从15取到0] ) !=0 ;(从高位到低位  16个数字

②cout<<(n<<i[i从15取到1]<0)(顺序由i来决定,如果i从大到小,那就是从高位到低位的顺序,即输出值就是二进制码

(这个不行啊   这个应该是根据符号位来判断01的,但是现在编译器里面好像是32位还是怎么,得到的结果永远都是>0的)

2.毒酒问题

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值