与、或、异或

简介: 与、或、异或

1.与运算(&)


参加运算的两个数据,按[二进制]位进行“与”运算。

运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;

即:两位同时为“1”,结果才为“1”,否则为0

例如:3&5 即 0000 0011 & 0000 0101 = 0000 0001 因此,3&5的值为1。

例如:9&5 即 0000 1001 (9的二进制补码)&00000101 (5的二进制补码) =00000001 (1的二进制补码)可见9&5=1。

2.或运算(|)


参加运算的两个对象,按二进制位进行“或”运算。

运算规则:0|0=0; 0|1=1; 1|0=1; 1|1=1;

即 :参加运算的两个对象只要有一个为1,其值为1

例如: 3|5 可写算式如下: 0000 0011 | 0000 0101 = 0000 0111(十进制为7)因此,3|5的值为7。

例如:9|5 可写算式如下: 00001001 | 00000101 = 00001101 (十进制为13)因此,9|5的值为13。

3.[异或运算]


参加运算的两个数据,按二进制位进行“异或”运算。

运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0;

即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0

例如:9^5可写成算式如下: 00001001 ^ 00000101 = 00001100 (十进制为12)因此,9^5的值为12。

异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0 ^ 0=0,1 ^ 0=1,0 ^ 1=1,1 ^ 1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位,所以异或常被认作不进位加法。 初学开发的人,总是搞不清“或“运算和“异或“运算的本质区别,只知道对于或运算来说,结果是:只要有一个为1,就为1,只有都为0才为0;而异或的结果是相同为0,不同为1,这么说大家只是记住了一个运算法则,确不明白它们的意义,举个例子来说它们之间的区别:

先说或的意义:

有学生证或者血型是AB型的人才可以免费吃我们提供的午餐,这里存在3种情况都可以免费吃午餐:

1)有学生证的人

2)AB型的人,可能不是学生啊!

3)既是AB型,又有学生证的人,两种条件都满足,这是或运算最大的特点。

再说异或的意义:

只有中国人和美国人可以免费领取我们提供的特色服务,这里只有两种情况:

1)是中国人

2)是美国人

大家仔细思考,异或没有既是中国人,又是美国人的情况,因为一个人的国籍只可能是一种,这就是异或与或最大的差别,在异或中,测试对象只可能满足一个条件,而在或运算中,测试对象可以同时满足2个条件。

相关文章
|
7月前
|
存储 Java
一篇搞定位运算(&、|、^、~、>>、<<、>>>)
我们最了解的就是十进制 , 除了十进制 , 还有二进制 , 六进制 , 八进制等等 , 由于位运算操作就是二进制 , 所以我们主要来说一下二进制 , 十进制的个位有(0~9)这几个数字 , 而二进制也相同 , 二进制的个位上只有0和1
33 0
|
5天前
|
算法 测试技术 C++
【位运算 拆位法】1835. 所有数对按位与结果的异或和
【位运算 拆位法】1835. 所有数对按位与结果的异或和
|
14天前
|
算法
异或算法
异或算法
|
5月前
[leetcode 数位运算] 2939. 最大异或乘积 M
[leetcode 数位运算] 2939. 最大异或乘积 M
|
9月前
位运算专题(个人理解)
位运算专题(个人理解)
44 0
位运算中的按位与(&),按位或(|),按位异或(^)
位运算中的按位与(&),按位或(|),按位异或(^)
77 0
位运算中的按位与(&),按位或(|),按位异或(^)
|
机器学习/深度学习 算法
算法提升(二) 异或法
算法提升(二) 异或法
306 2
算法提升(二) 异或法
回文数||(位运算)
题目: 判断一个非负整数n的二进制表示是否为回文数
119 0
【28. 最大异或对】
最大异或对就是在给定的数中,找到俩个数使得,这俩个数异或后的结果最大。 - 一般采用`暴力法`和`字典树`的方法。
113 0
【28. 最大异或对】
使用^、&(异或、并且)位运算 实现算数加法(+)
用位运算即是计算机的运算规则,而计算机只懂得二进制,所以位运算使用的进制是二进制。
122 0
使用^、&(异或、并且)位运算 实现算数加法(+)