基础位运算符

1.按位与

​ 符号: &

​ 说明:把参与运算的两个数对应的二进制位相与。只有两个二进制均为1时,结果的对应位才是1,否则为0.

​ 例子:当 5&9 时:

​ 5的二进制:0000 0101;9的二进制:0000 1001;


2.按位或

​ 符号: |

​ 说明:把参与运算的两个数对应的二进制位相或。只要对应的两个二进制位有一个为1时,其结果就为1.

​ 例子:当 5|9 时:


3.按位异或 (疑惑)

​ 符号: ^ (xor)

​ 说明:把参与运算的两个数对应的二进制位相异或,当对应的二进制位上的数据字不相同时,结果对应为1,否则为0.

​ 一些简单的例子:1 xor 1 = 0, 1 xor 0 = 1, 0 xor 0 = 0, 0 xor 1 = 1

​ 例子:

1596370783693


4.取反

​ 符号:~

​ 说明:把运算数的各个二进制按位求反。

​ 例子:

1596371292876


5.移位

  • 左移(<<)

    说明:把"<<"左边的运算数的各二进制位向左移若干位,"<<"右边的数是指定移动的位数,高位丢弃,低位补0。

    例子:a<<4指把a的各二进位向左移动4位,如 a = 0000 0011(十进制为3),左移4位后为 0011 0000(十进制为48)。

  • 右移(>>)

    说明:把">>"左边的运算数的各二进制位全部右移若干位,">>"右边的数是指定移动的位数。

    例子:设 (a=15)(a>>2) 表示把 0000 1111 右移为 0000 0011(十进制为3)

    算数右移等于除以 2 向下取整,((-3) >> 1 = -2)(3 >> 1 = 1)

    整数除以 2 在 C++ 中实现为 “除以 2 向零取整”,((-3)/2=-1)(3/2=1)

  • 简便的运算方法:

    [a<<n =a*2^n ]

    [a>>n=a*frac{1}{2^n} ]


说明

​ 需要说明的是,对于有符号数,在右移时,符号位将随同移动。当操作数为正数时,最高位为 0 ,而为负数时,最高位为 1 。最高位是补 0 或补 1 取决于编译系统的规定。

EdisonBa

2020.8.16

原文地址:https://www.cnblogs.com/EdisonBa/p/13423100.html