A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谁想去飞 中级黑马   /  2014-11-20 21:53  /  730 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


    位运算: 一个数的二进制的每一位进行的运算

    位运算符:

           &   按位与      //&& 逻辑与(一假为假,同真为真)

               参与运算的二进制位进行与操作(都是1的时候才为1,否则为假)

     例:      9&1
           00001001
           00000001
-------------------
           00000001     1


           |   按位或


               参与运算的二进制位进行或操作(有1则为1,同0则为0)


           9|1
           00001001
           00000001
---------------------
           00001001      9


           ^  按位异或

              参与运算的二进制位进行异或操作(相同为0,不同为1)

           9^1

           00001001
           00000001
---------------------
           00001000         8


          ~  按位取反(单目运算)

             参与运算的二进制位进行取反操作(1变0 0变1)

          ~9

           00001001
          ~
-------------------
           11110110


           <<  按位左移

               参与运算的二进制位进行按位(逐位)的左移操作

                注意:
                1)移出的位直接丢弃,右侧补0
                2)左移可能改变一个数的正负型
                3)一个数左移n,就相等这个数乘以 2^n


           9<<2;  //9*4
           9<<4;  //9*16

           000000 00000000 00000000 0000100100
           |

           100000 00000000 00000000 00000000111


           >>  按位右移

             参与运算的二进制位进行按位(逐位)的右移操作

             注意:
             1)移出的位直接丢弃,左侧补符号位
             2)右移不会改变一个数的正负性
             3)一个数右移n,就相等这个数除以 2^n

           16>>2    // 16 / 4 =4
           16>>3    // 16 / 8 =2

             00000000000 00000000 00000000 00010
                                               |



           如果是一个数是偶数,最低位0
                       奇数      1




#include <stdio.h>

int main(int argc, const char * argv[]) {

    int a = 9,b=1;
    int c;
    c = 9&1; //按位与
    c = 9|1; //按位或
    c = 9^1; //按位异或
    c = ~9;
    c = 0b10000000000000000000000000000111;
    int k = -2147483641;
    c = k<<2;
    c = 9<<4;
    printf("c = %d\n",c);


    return 0;
}

评分

参与人数 1黑马币 +1 收起 理由
星河鹭起 + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马