位运算

位运算就是基于整数的二进制表示进行的运算。由于计算机内部就是以二进制来存储数据,位运算是相当快的。

基本的位运算共6种,分别为按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、左移(<<)和右移(>>)。

 

与(&)、或(|)、异或(^)

运算 运算符 数学符号 解释
& &、and 只有两个都为1时才为1
| |、or 只要其中一个为1时就为1
异或 ^ ^、xor 只有两个不同时才为1(异为1,同为0)

举例:

&

0010 1101 & 0001 0111 = 0000 0101

|

0010 1101 | 0001 0111 = 0011 1111

^

0010 1101 ^ 0001 0111 = 0011 1010

 

异或(^)的小技巧

在程序中如果要交换两数的值,通常的做法是声明一个中间变量t来实现交换

如果用^来运算的话则不需要额外声明中间变量

例如:

    int a = 15, b = 17;
    cout << a << ' ' << b << endl;
    a ^= b;
    b ^= a;
    a ^= b;
    cout << a << ' ' << b << endl;
输出结果:
15 17
17 15
 
此外,一个变量对同一个数异或两次变量的值还是原来的值
例如:
    int a = 15, b = 17;
    cout << a << ' ' << b << endl;
    a ^= b;
    a ^= b;
    cout << a << ' ' << b << endl;

输出:

15 17

15 17

 

取反(~)

顾名思义,在二进制中取反就是0变成1,1变成0

例:~0010 1011 = 1101 0100

 

左移(<<)、右移(>>)

num << i 表示将 num 的二进制表示向左移动 i 位所得的值。

num >> i 表示将 num 的二进制表示向右移动 i 位所得的值

举例:

0001 0110 << 2 = 0101 1000

0001 0110 >>2 = 0000 0101

num<<i 可以看作是把num乘2的i次幂倍(在不超过指定范围内)

如15<<1  结果为30(15*2) 15<<2 结果为60(15*4)

反之>>可看作<<的相反操作

 

..........(待续)

 

联系我

QQ:1801770454(QQ微信同号)

posted @ 2022-03-07 19:18  深情的山鸡  阅读(79)  评论(0)    收藏  举报