位运算

【 1. 定义 】

程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。

【 2. 位运算符 】

范围:用于有符号和无符号的整型数,包括char short int long unsigned。
基本位运算符共六种: ~ & | ^ << >>

【 3. 基本位运算 】

1. ~ 按位取反运算
单目运算符

  1. 作用:
    用来对一个二进制数按位取反,即将0变1,将1变0。
  2. 规则:
    ~ 0 =1, ~1=0
  3. 例如:
    ~ (1001b)=0110b

2. & 按位与运算
双目运算符

  1. 作用:
    参与运算的两数各对应的二进制位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
  2. 规则:
    1 | 0=1,0 | 1=1,0 | 0=0
  3. 例如:
    (1010b)&(1111b)=1010b

4. ^ 按位异或运算
双目运算符

  1. 作用:
    参与运算的两数各对应的二进位相异或,当两数对应的二进位相异时,结果为1,否则为0,参与运算数仍以补码出现。
  2. 规则:
    1 ^ 1=0 ,1 ^ 0=1 ,0 ^ 1=1 ,0 ^ 0=0
  3. 例如:
    (1010b)^(1100b)=01110b
  4. 运用:
    利用异或运算,不必设置第三个变量,即可完成两个变量间的交换
    a=3=00000011b
    b=4=00000100b
    a=a^b=00000111b
    b=b^a=00000011b
    a=a^b=00000100b

5. << 左移运算
双目运算符

  1. 作用:把“<<”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。
  2. 例如:
    a<<4指把a的各二进位向左移动4位。如a=00000011b(十进制3),左移4位后为00110000(十进制48)。

6. >> 右移运算
双目运算符

  1. 作用:将操作数的各个二进位顺序右移,左端空出的位补0或补1(应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时, 最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。Turbo C和很多系统规定为补1。 ),而移出右端之外的位则舍去。
  2. 例如:
    设 a=15,a>>2 表示把00001111b右移为00000011b(十进制3)

【 4. 复合运算 】

&= |= ^= <<= >>=

【 5. 优先级 】

位运算_第1张图片

【 6. 位运算在MCU的应用 】

通过位运算可以特定设置寄存器的某一位,而不影响其他位。

  1. 令寄存器的某位置1:
    令该寄存器 | =一个数,该数二进制位数与寄存器位数相同,预置1的位为1,其余位为0
  2. 令寄存器的某位置0:
    令该寄存器 & =一个数,该数二进制位数与寄存器位数相同,预置0的位为0,其余位为1

你可能感兴趣的:(C++)