位与运算

 

#include <stdio.h>

 

 

int main()

{

    /* 按位与 &

     

     10101010000

     00000100000

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

     00000000000

     

     10111011

     10101101

     ---------

     10101001

     

     1001

     0101

     -----

     0001

     */

    

    /*

     按位或 |

     1001

     0101

     -----

     1101

     */

    

    

    /*

     按位异或 ^ 

     1.相同数值进行异或,结果肯定是0,比如9^9

     2.交换 9^5^6 == 9^6^5

     3.任何数值跟0进行异或,结果还是原来的数值,9^0 == 9

     4.a^b^a == a^a^b == 0^b == b

     

     1001

     0101

     -----

     1100

     

     1001

     1001

     -----

     00000

     

     0101

     0000

     ----

     0101

     

     9^5^9 == 9^9^5 = 0^5 = 5

     

     a^b^a == b

     */

    //printf("%d\n", 9^9);

    

    //printf("%d\n", 9 ^ 5);

    

    /*

     按位取反 ~

     ~0000 0000 0000 0000 0000 0000 0000 1001

      1111 1111 1111 1111 1111 1111 1111 0110

     */

    //printf("%d\n", ~9);

    

    /*

     左移 <<

     

     0000 0000 0000 0000 0000 0000 0000 0000

     00 0000 0000 0000 0000 0000 0000 100100

     

     9<<1 -> 9 * 2的1次方 == 18

     9<<2 -> 9 * 2的2次方 ==36

     9<<n -> 9 * 2的n次方

     */

    

    //printf("%d\n", 9<<1);

    

    /*

     右移 >>

     0000 0000 0000 0000 0000 0000 0000 0000

     000000 0000 0000 0000 0000 0000 0000 10

     111111 1111 1111 1111 1111 1111 1111 10 

     

     8>>1 -> 8/2 == 4

     8>>2 -> 8/2的2次方 == 2

     8>>n -> 8/2的n次方

     */

    

    printf("%d\n", 8>>3);

    

    return 0;

}

posted @ 2016-03-28 09:15  lance.xiang  阅读(133)  评论(0)    收藏  举报