位与,位或,异或运算符的意义!

2024/3/1·2 views

位与(AND)、位或(OR)和异或(XOR)是三种基本的位运算符,常用于处理二进制数据。它们分别表示为 &|^

  1. 位与运算符(&)

    • 作用:将两个操作数的对应位进行逻辑与运算,只有当两个位都为1时,结果位才为1;否则结果位为0。
    • 示例:1010 & 1100 = 1000
  2. 位或运算符(|)

    • 作用:将两个操作数的对应位进行逻辑或运算,只要两个位中有一个为1,结果位就为1;否则结果位为0。
    • 示例:1010 | 1100 = 1110
  3. 异或运算符(^)

    • 作用:将两个操作数的对应位进行异或运算,相同位的结果为0,不同位的结果为1。
    • 示例:1010 ^ 1100 = 0110

    异或运算(XOR)是一种基本的逻辑运算,常用于计算机科学和编程中。异或操作符通常表示为 ^。它有一些重要的特性和用途:

    1. 相同位的异或结果为0,不同位的异或结果为1:这是异或操作的基本特性。如果两个操作数的某一位相同,则对应结果位为0;如果两个操作数的某一位不同,则对应结果位为1。

    2. 交换两个变量的值:通过异或运算,可以在不使用额外变量的情况下交换两个变量的值。这是由于异或运算具有自反性,即 a ^ b ^ b = a。因此,可以利用这一性质实现变量值的交换,如下所示:

    plaintext 复制代码
    a = a ^ b
    b = a ^ b
    a = a ^ b
    1. 检测出现奇数次的元素:在一个数组中,如果只有一个元素出现了奇数次,其余元素都出现了偶数次,可以通过对数组中所有元素进行异或操作,最终得到的结果就是只出现奇数次的那个元素。

    2. 消除成对出现的元素:如果一个数组中有多个成对出现的元素,只有一个元素是单独出现的,可以通过对数组中所有元素进行异或操作,最终得到的结果就是单独出现的那个元素。

    3. 快速计算校验和:在数据传输或存储过程中,可以使用异或运算来计算校验和,以检测数据是否在传输或存储过程中发生了错误。

    总的来说,异或运算在编程中具有广泛的应用,可以用于解决各种问题,包括交换变量、查找单独出现的元素、计算校验和等。

这些位运算符通常用于底层编程、数据加密、位掩码操作等场景。它们可以对二进制数据进行逐位操作,执行诸如掩码、清除、设置位等操作。在实际应用中,它们与位移操作、逻辑运算和条件语句等结合使用,能够实现各种复杂的算法和逻辑。

位操作---置位(置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)