• C++ 位运算符


    位运算

    位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示:

    pqp & qp | qp ^ q
    00000
    01011
    11110
    10011

    假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:

    A = 0011 1100

    B = 0000 1101

    -----------------

    A&B = 0000 1100

    A|B = 0011 1101

    A^B = 0011 0001

    ~A  = 1100 0011

    下表显示了 C++ 支持的位运算符。假设变量 A 的值为 60,变量 B 的值为 13,则:

    运算符描述实例
    &

    按位与操作,按二进制位进行"与"运算。运算规则:

    0&0=0;   
    0&1=0;    
    1&0=0;     
    1&1=1;
    (A & B) 将得到 12,即为 0000 1100
    |

    按位或运算符,按二进制位进行"或"运算。运算规则:

    0|0=0;   
    0|1=1;   
    1|0=1;    
    1|1=1;
    (A | B) 将得到 61,即为 0011 1101
    ^

    异或运算符,按二进制位进行"异或"运算。运算规则:

    0^0=0;   
    0^1=1;   
    1^0=1;  
    1^1=0;
    (A ^ B) 将得到 49,即为 0011 0001
    ~

    取反运算符,按二进制位进行"取反"运算。运算规则:

    ~1=-2;   
    ~0=-1;
    (~A ) 将得到 -61,即为 1100 0011,一个有符号二进制数的补码形式。
    <<二进制左移运算符。将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。A << 2 将得到 240,即为 1111 0000
    >>二进制右移运算符。将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。A >> 2 将得到 15,即为 0000 1111

    实例

    请看下面的实例,了解 C++ 中可用的位运算符。

    复制并黏贴下面的 C++ 程序到 test.cpp 文件中,编译并运行程序。

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. unsigned int a = 60; // 60 = 0011 1100
    6. unsigned int b = 13; // 13 = 0000 1101
    7. int c = 0;
    8. c = a & b; // 12 = 0000 1100
    9. cout << "Line 1 - c 的值是 " << c << endl ;
    10. c = a | b; // 61 = 0011 1101
    11. cout << "Line 2 - c 的值是 " << c << endl ;
    12. c = a ^ b; // 49 = 0011 0001
    13. cout << "Line 3 - c 的值是 " << c << endl ;
    14. c = ~a; // -61 = 1100 0011
    15. cout << "Line 4 - c 的值是 " << c << endl ;
    16. c = a << 2; // 240 = 1111 0000
    17. cout << "Line 5 - c 的值是 " << c << endl ;
    18. c = a >> 2; // 15 = 0000 1111
    19. cout << "Line 6 - c 的值是 " << c << endl ;
    20. return 0;
    21. }

    当上面的代码被编译和执行时,它会产生以下结果:

    Line 1 - c 的值是 12
    Line 2 - c 的值是 61
    Line 3 - c 的值是 49
    Line 4 - c 的值是 -61
    Line 5 - c 的值是 240
    Line 6 - c 的值是 15
  • 相关阅读:
    C和指针 第12章 使用结构和指针 12.7 问题
    ping命令详解
    微信小程序-上拉加载和下拉刷新
    Windows技巧之注册表
    【Linux】自己实现一个bash进程
    ssm驾考预约管理系统设计与实现毕业设计源码250910
    [免费专栏] Android安全之Android Fragment注入
    【机器学习】KNN算法-模型选择与调优
    Mybatis基础
    曼哈顿距离与曼哈顿矩形-打印回字型矩阵
  • 原文地址:https://blog.csdn.net/DUXS11/article/details/126241765