位与,位或,异或运算符的意义!
位与(AND)、位或(OR)和异或(XOR)是三种基本的位运算符,常用于处理二进制数据。它们分别表示为 &、| 和 ^。
-
位与运算符(&):
- 作用:将两个操作数的对应位进行逻辑与运算,只有当两个位都为1时,结果位才为1;否则结果位为0。
- 示例:
1010 & 1100 = 1000
-
位或运算符(|):
- 作用:将两个操作数的对应位进行逻辑或运算,只要两个位中有一个为1,结果位就为1;否则结果位为0。
- 示例:
1010 | 1100 = 1110
-
异或运算符(^):
- 作用:将两个操作数的对应位进行异或运算,相同位的结果为0,不同位的结果为1。
- 示例:
1010 ^ 1100 = 0110
异或运算(XOR)是一种基本的逻辑运算,常用于计算机科学和编程中。异或操作符通常表示为
^。它有一些重要的特性和用途:-
相同位的异或结果为0,不同位的异或结果为1:这是异或操作的基本特性。如果两个操作数的某一位相同,则对应结果位为0;如果两个操作数的某一位不同,则对应结果位为1。
-
交换两个变量的值:通过异或运算,可以在不使用额外变量的情况下交换两个变量的值。这是由于异或运算具有自反性,即
a ^ b ^ b = a。因此,可以利用这一性质实现变量值的交换,如下所示:
plaintexta = a ^ b b = a ^ b a = a ^ b-
检测出现奇数次的元素:在一个数组中,如果只有一个元素出现了奇数次,其余元素都出现了偶数次,可以通过对数组中所有元素进行异或操作,最终得到的结果就是只出现奇数次的那个元素。
-
消除成对出现的元素:如果一个数组中有多个成对出现的元素,只有一个元素是单独出现的,可以通过对数组中所有元素进行异或操作,最终得到的结果就是单独出现的那个元素。
-
快速计算校验和:在数据传输或存储过程中,可以使用异或运算来计算校验和,以检测数据是否在传输或存储过程中发生了错误。
总的来说,异或运算在编程中具有广泛的应用,可以用于解决各种问题,包括交换变量、查找单独出现的元素、计算校验和等。
这些位运算符通常用于底层编程、数据加密、位掩码操作等场景。它们可以对二进制数据进行逐位操作,执行诸如掩码、清除、设置位等操作。在实际应用中,它们与位移操作、逻辑运算和条件语句等结合使用,能够实现各种复杂的算法和逻辑。
位操作---置位(置1)、清除和取反
我们在对寄存器进行编程时,通常需要对寄存器中的某一位进行置1、清除或取反操作,但是同时我们又不能影响其它位。所以接下来讲解具体如何对相应位进行上述3种操作。
下面讲的做法,特点是:
(1)不需要将寄存器里的原值读出来,即我们不需要知道目标寄存器中的原设定值,我们只需将要设定的位的值写入该寄存器即可。
(2)对要设定位的操作,不会影响相邻的其他位。
1、置位(置1)
1.1含义
就是将数据的某些位设为1。
1.2做法
采用 “或”运算 和 移位。
为什么不会改变其它位呢?
因为其它位进行“或”运算的对象都是0.
例:
1.将a的第7位、第9位置位:
int a=0x0023;
a |=( (1<<7) | (1<<9));
2、清零
2.1 含义
就是将数据的某些位设为0。
2.2 做法
采用与运算,“取反”,移位,或运算。
如何不改变其它位呢?
就是其它位进行“与”运算的对象都是1.
例:
1.将a的第7位、第9位清除:
int a=0x0023;
a &=~( (1<<7) | (1<<9) );
3、取反
3.1 含义
就是将数据的某些位进行取反。
3.2 做法
采用或运算、异或运算。
位操作之异或运算的特点就是:两位相同的话,异或结果为0;不同为1。
思想:让要进行取反的位都和1进行异或,其他位则都和0进行异或。
例:将a的第7位和第9位取反。
int a=0x0023;
a ^=((1<<7) | (1<<9));
其他
MD5函数生成的hash是128位,每8位为1Byte(字节),共16字节。用16进制表示长度是32 (每4个二进制位最大可以表示16)