📜  C C++中的按位运算符(1)

📅  最后修改于: 2023-12-03 15:13:44.746000             🧑  作者: Mango

C/C++中的按位运算符

C/C++语言中拥有六个按位运算符,它们分别是:按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、左移位(<<)和右移位(>>)。它们用于对二进制位按位进行操作。

按位与(&)

按位与运算符(&)是二进制运算符,对两个操作数的每一个二进制位进行取“与”操作,仅当两个运算数的对应二进制位都为1时,结果的对应二进制位才为1,否则为0。

示例代码:

#include <iostream>

using namespace std;

int main() {
    int a = 5; // 二进制:101
    int b = 6; // 二进制:110

    int c = a & b; // 二进制:100,转换为十进制为4

    cout << c << endl; // 输出:4

    return 0;
}
按位或(|)

按位或运算符(|)是二进制运算符,对两个操作数的每一个二进制位进行取“或”操作,仅当两个运算数的对应二进制位都为0时,结果的对应二进制位才为0,否则为1。

示例代码:

#include <iostream>

using namespace std;

int main() {
    int a = 5; // 二进制:101
    int b = 6; // 二进制:110

    int c = a | b; // 二进制:111,转换为十进制为7

    cout << c << endl; // 输出:7

    return 0;
}
按位异或(^)

按位异或运算符(^)是二进制运算符,对两个操作数的每一个二进制位进行取“异或”操作,仅当两个运算数的对应二进制位相同时,结果的对应二进制位为0,否则为1。

示例代码:

#include <iostream>

using namespace std;

int main() {
    int a = 5; // 二进制:101
    int b = 6; // 二进制:110

    int c = a ^ b; // 二进制:011,转换为十进制为3

    cout << c << endl; // 输出:3

    return 0;
}
按位取反(~)

按位取反运算符(~)是一元运算符,对其操作数进行按位取反,即将二进制数的每一位从0变成1,从1变成0。

示例代码:

#include <iostream>

using namespace std;

int main() {
    int a = 5; // 二进制:101

    int b = ~a; // 二进制:11111111111111111111111111111010,转换为十进制为-6

    cout << b << endl; // 输出:-6

    return 0;
}
左移位(<<)

左移位运算符(<<)是二进制运算符,将其左边的操作数二进制数向左移动指定的位数,右侧用0补齐。移位后,高位溢出,舍弃。

示例代码:

#include <iostream>

using namespace std;

int main() {
    int a = 5; // 二进制:101

    int b = a << 2; // 二进制:10100,转换为十进制为20

    cout << b << endl; // 输出:20

    return 0;
}
右移位(>>)

右移位运算符(>>)是二进制运算符,将其左边的操作数二进制数向右移动指定的位数。移位后,低位溢出,舍弃。对于有符号整数,移位后需要考虑符号位。

示例代码:

#include <iostream>

using namespace std;

int main() {
    int a = 20; // 二进制:10100

    int b = a >> 2; // 二进制:101,转换为十进制为5

    cout << b << endl; // 输出:5

    return 0;
}

以上就是C/C++中的按位运算符,需要注意的是,由于操作的是二进制数的每一位,因此操作数为负数时需要注意符号位的影响。