位运算

来源:互联网 发布:linux命令date格式化 编辑:程序博客网 时间:2024/06/15 11:32


#include <stdio.h>




int main()
{
    /* 按位与 &
     
     10101010000
     00000100000
     -------------
     00000000000
     
     10111011
     10101101
     ---------
     10101001
     
     1001
     0101
     -----
     0001


9 & 5 = 1
     */
    
    /*
     按位或 |
     1001
     0101
     -----
     1101


    9 | 5 = 13
     */
    
    
    /*
     按位异或 ^ 
     1.相同数值进行异或,结果肯定是0,比如9^9 = 0
     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


9 ^ 5 = 12
     
     1001
     1001
     -----
     0000
     
     0101
     0000
     ----
     0101
     
     9^5^6 == 9^6^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


 ~9 = -10
     */
    //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); //1
    
    return 0;
}
0 0
原创粉丝点击