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个条件。