美文网首页
基础位运算符

基础位运算符

作者: Gino_4bd4 | 来源:发表于2021-03-04 11:29 被阅读0次

    位运算符是用来对二进制位进行操作的

    c语言中有6种位运算符:

    & 按位与
    | 按位或
    ^ 按位异或
    ~ 取反
    << 左移
    右移>> (带符号右移)> > >(无符号右移)

    1.按位与& 运算符

    按位与运算符“&”是双目运算符。
    其功能是参与运算的两数各对应的二进位相与。
    只有对应的两个二进位都为1时,结果位才为1。
    千万不要与 && 混淆

    首先把数转换为2进制
    比如:
    10 二进制为:1010
    11 二进制为:1011

    1 0 1 0
    1 0 1 1


    1 0 1 0

    注意:有对应的两个二进位都为1时,结果位才为1

    结果 1010 还是10
    10 & 11 等于 10

    image.png

    code:

    #include <iostream>
    
    int main()
    {
        auto i1 = 10;       //2进制:1010 , 10进制:10
        auto i2 = 20;       //2进制:10100 , 10进制:20
    
        std::cout << (i1 & i2)<<std::endl; //2进制00000 10进制:0
                    
        /*              步骤: 当两个都为1时,才为1
                                    1 0 1 0
                                  1 0 1 0 0
                                  ---------
                                  0 0 0 0 0 
        */
                    
        auto i3 = 11;
        
        std::cout << (i1 & i3);           //2进制:1010 10进制:10
    
        /*              步骤: 当两个都为1时,才为1
                                    1 0 1 0
                                    1 0 1 1 
                                  ---------
                                    1 0 1 0
        */
    
        system("pause");
    }
    
    

    2.按位或| 运算符

    按位或运算符“|”是双目运算符。
    其功能是参与运算的两数各对应的二进位相或。
    只要对应的二个二进位有一个为1时,结果位就为1

    首先把数转换为2进制
    比如:
    10 二进制为:1010
    11 二进制为:1011

    1 0 1 0
    1 0 1 1


    1 0 1 1

    只要对应的二个二进位有一个为1时,结果位就为1

    image.png

    code:

    int main()
    {
    
    
    
    
        auto i1 = 10;       //2进制:1010 , 10进制:10
        auto i2 = 20;       //2进制:10100 , 10进制:20
    
        std::cout << (i1 | i2) << std::endl; //2进制11110 10进制:30
    
        /*              步骤: 当有一个为1时,就为1
                                    1 0 1 0
                                  1 0 1 0 0
                                  ---------
                                  1 1 1 1 0
        */
    
        auto i3 = 11;
    
        std::cout << (i1 | i3);           //2进制:1011 10进制:11
    
        /*              步骤: 当有一个为1时,就为1
                                    1 0 1 0
                                    1 0 1 1
                                  ---------
                                    1 0 1 1
        */
    
    }
    

    3.按位异或^ 运算符

    当前位的两个二进制表示不同则为1相同则为0

    首先把数转换为2进制
    比如:
    10 二进制为:1010
    11 二进制为:1011

    1 0 1 0
    1 0 1 1


    0 0 0 1

    注意:当前位的两个二进制表示不同则为1相同则为0

    结果 0001 是1
    10 & 11 等于 1

    image.png

    Code:

    int main()
    {
        
    
        auto i1 = 10;       //2进制:1010 , 10进制:10
        auto i2 = 20;       //2进制:10100 , 10进制:20
    
        std::cout << (i1 ^ i2) << std::endl; //2进制11110 10进制:30
    
        /*              步骤: 当前位的两个二进制表示不同则为1相同则为0
                                    1 0 1 0
                                  1 0 1 0 0
                                  ---------
                                  1 1 1 1 0
        */
        
        auto i3 = 11;
    
        std::cout << (i1 ^ i3);           //2进制:1011 10进制:1
    
        /*              步骤: 当前位的两个二进制表示不同则为1相同则为0
                                    1 0 1 0
                                    1 0 1 1
                                  ---------
                                    0 0 0 1
        */
    }
    

    4. 按位取反 ~ 运算符

    因为涉及到 补码 原码 符号,感觉挺复杂的,涉及的知识比较多
    总结为一句:

    对所有整数取反=本身的相反数-1

    ~9 = -10
    ~10 = -11

    5.左移和右移运算符

    左移:


    image.png

    右移:


    image.png

    总结:

    image.png image.png

    code:

    #include <iostream>
    
    int main()
    {
    
        auto i = 11;        //2进制: 1011 ,10进制:11
         i = i << 1;        //左移1位
         std::cout << i;    //2进制: 10110 ,10进制:22
         i = i << 1;        //继续左移1位
         std::cout << i;    //2进制: 101100 ,10进制:44
    
    
         auto i2 = 11;  
         i2 = i2 >> 1;      //右移
         std::cout << i2;   //2进制: 101 ,10进制:5
         i2 = i2 >> 1;      //继续右移一位
         std::cout << i2;   //2进制: 10 , 10进制:2
    
    
    
        system("pause");
    }
    

    相关文章

      网友评论

          本文标题:基础位运算符

          本文链接:https://www.haomeiwen.com/subject/ubahqltx.html