位运算符

来源:互联网 发布:采购流程优化 编辑:程序博客网 时间:2024/06/18 17:07
位运算符
    对数据的操作, 精确到每一位    

1,  & 

  功能:
    按位 与 .
  举例
   (1) 5 & 7        5   -- 0 0000101    &   7   -- 0 0000111    --------------------        5   -- 0 0000101   (2) 5 & (-7)        5   -- 0 0000101    &  -7   -- 1 1111001    --------------------        1   -- 0 0000001


  用途
   信息采集, 如 去 5的第0位和第6位
        5   -- 0 0000101    &  65   -- 0 1000001    --------------------        1   -- 0 0000001




2, |

  功能
    按位 或.
  举例
   (1) 5 & 7        5   -- 0 0000101    |   7   -- 0 0000111    --------------------        7   -- 0 0000111   (2) 5 & (-7)        5   -- 0 0000101    |  -7   -- 1 1111001    --------------------       补码 -- 1 1111101       -3      1 0000011




3, ~

  功能
    按位 取反.
  举例
    (1) ~5     ~   5   -- 0 0000101    ---------------------         -   -- 1 1111010        -6      1 0000110    (1) ~(-6)     ~  -6   -- 1 1111010    ---------------------         5   -- 0 0000101




4, ^

  功能
    按位 异或.
    异或, 相同为0, 相异为1
  举例
        5   -- 0 0000101    ^   7   -- 0 0000111    --------------------        2   -- 0 0000010  




5, <<

  功能
    左移, 整体左移, 末尾补0
    每左移一位, 相当于 乘以 2
  举例
    (1)       5<<1   -- 0 0000101     ---------------------             10   -- 0 0001010    (2)       (-5)<<1-- 1 1111011     ---------------------              -   -- 1 1110110        -10      1 0001010 


6, >>

  功能
    右移, 整体右移, 首位补符号位
    每右移一位, 相当于 除以 2 
  举例
    (1)       5>>1   -- 0 0000101     ---------------------              2   -- 0 0000010    (2)       (-5)>>1-- 1 1111011     ---------------------              -   -- 1 1111101         -3      1 0000011 



#include <stdio.h>int main(void) {    printf("\n============= & ================\n");    // &        printf( "%d \n", 5 & 7 );   // 5    printf( "%d \n", 5 & (-7) ); // 1    // &&   , 逻辑运算符    printf( "%d \n", 5 && 7 ); // true && true = true    printf( "%d \n", 0 && 7 ); // false && true = false    printf("\n============= | ================\n");    printf( "%d \n", 5 | 7 );   // 7    printf( "%d \n", 5 | (-7) );// -3    printf("\n============= ~ ================\n");    printf( "%d \n", ~5 );      // -6    printf( "%d \n", ~(-6) );   // 5    printf("\n============= ^ ================\n");    printf( "%d \n", 5 ^ 7 );   // 2    printf("\n============= << ================\n");    printf( "%d \n", 5<<1 );    // 10    printf( "%d \n", (-5)<<1 ); // -10    printf("\n============= >> ================\n");    printf( "%d \n", 5>>1 );    // 2     printf( "%d \n", (-5)>>1 ); // -3    printf( "%d \n", (-5)/2 );  // -2    return 0;}