&&是逻辑与 —— ||是逻辑或 —— &是按位与 —— |是按位或 —— ^是按位异或 —— <<是按位左移 —— >>是按位右移 —— ~是按位取反

&&是逻辑与                                

“与”就是“并且”的意思,比如现在有一个数字a,

a < 1 && a > 0

就是表示a在0和1之间;

表达式1表达式2逻辑与结果
TrueTrueTrue
TrueFalseFalse
FalseTrueFalse
FalseFalseFalse

"逻辑与"关注的是符号两边数的真值。有0为0(C语言中可以这样看:0是False,0以外的值都为True)

||是逻辑或     

a > 1 || a < 0

就表示a比一大,或者a比零更小。

表达式1表达式2逻辑与结果
TrueTrueTrue
TrueFalseTrue
FalseTrueTrue
FalseFalseFalse

"逻辑或"关注的是符号两边数的真值。同0为0(C语言中可以这样看:0是False,0以外的值都为True)



&是位与    |是位或

   &        按位与

   |          按位或

   ^         按位异或

   <<      按位左移

   >>      按位右移

   ~        按位取反

1. 按位与(AND):&

      一定要将&与&&区分开来,后者是逻辑与。

(1)按位与的定义是:同一二进制位上的数字都是1的话,&的结果为1,否则为0.

0 & 0 = 0;

0 & 1 = 0;

1 & 1 = 1;

(2)根据这个特性,&操作常常用来屏蔽特定的二进制位。例如:

             0000 1111 & 0000 0011

             结果为0000 0011       可以看见,1111的前两位被屏蔽成为0了。

       所以如果想清空数据,只需要将原二进制数与上0就可以了。0的位数对应原二进制数的位数,对各位进行屏蔽,全部置0.

       相对的,&可以利用0来屏蔽,也可以用1来读取。

             例如: 一个二进制数 1101 1001,我只想要它的后四位,怎么办呢?

             只需要进行如下操作:1101 1001 & 0000 1111即可。

             其实该方法是屏蔽和读取的结合,&0保证消除无用位,&1保证有用数据的完整性。

            总结:对于原二进制数来说,&0是屏蔽,&1是不变。

2.按位或(OR):|

            同样,不要将“|”和“||”(逻辑或)搞混。

(1)定义:只要参与运算的双方其中有一个是1,结果就是1.同0才为0.

            0 | 0 = 0;

            0 | 1 = 1;

            1 | 0 = 1;

            1 | 1 = 1;

(2)特殊用处:

            将某些特定位置1.

            例如:1010 0000 | 0000 1111.

            结果为 1010 1111.

            总结:对于原二进制数来说,|0是不变,|1是置1.

3.按位异或:^

           ^这个符号我们常用来表示次方。不过在计算机中,它代表的就不是次方的意思了。

(1)定义

           只要参与运算的双方互异,结果就为1,否则为0.

           0 ^ 1 = 1;

           1 ^ 0 = 1;

           1 ^ 1 = 0;

           0 ^ 0 = 0;

(2).用法

           可以通过上面的定义看到,一个数^1的话就会0变成1,1变成0,而^0则不对原数进行改变。所以根据此特性可以对特定位进行0 1 反转。

          例如: 1100 1100 ^ 0000 1100

          结果为 1100  0000.

          同样的,如果对一个数进行^0,代表保留原值。

         总结:对于原二进制数来说,^0是不变,^1是反转。

4. 取反(~)

         对一个二进制数进行取反。1变0,0变1.

         唯一需要注意的一点是,~的优先级是逻辑运算符中最高的,必须优先计算。

5. 左移,右移

         左移与右移比较类似,是将目标二进制数字向左/右移动相应的位数。

         左移补0:1111 1111 << 1 == 1111 1110,换算十进制的话是原来数值的2倍。

         右移看情况:负数补1,正数补0.需要看符号位。同样,换算为十进制数值变为原来的1/2.

         总结:左乘右除。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值