黑马程序员技术交流社区

标题: c 语言 位运算总结 [打印本页]

作者: 谁想去飞    时间: 2014-11-20 21:53
标题: c 语言 位运算总结

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

    位运算符:

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

               参与运算的二进制位进行与操作(都是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;
}






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2