按位运算符

87 阅读1分钟
<<(左移)、>>(右移)、~(取反)、&(与)、|(或)、^(异或)
  1. 左移<<:
    • 语法:

      value<<shift
      //例子
          13<<3		//13左移三位,即13*2^3=104
      
    • 错误示例:

      int x=20;
      int y=x<<3;		//不会修改x的值
      //修改x值得用
      x<<=3;		//等价于:x=x<<3;
      
  2. 右移>>:

    同左移,只是符号不同;

    value>>shift
    //例子
        //13右移三位,空白部分用0填充,超过边界的位将被删除,即13/2^3=1(退位取整)
        //13转换位二进制:00001101,右移3位后:00000001,即1
        13>>3		
    

    示例:

    int q=43;
    q>>=2;		//即43/2^2=10
    
  3. 按位取反~:
    • 将每个0转换为1;
    • 将每个1转换为0;
    ~a;
    
  4. 与&:
    • 都为1则为1;
    • 否则为0;
    a&=b;		//a=a&b;
    
  5. 按位或|:
    • 有1则为1;
    • 没有1则为0;
    a|=b;		//a=a|b;
    
  6. 异或^:
    • 相同为0;
    • 不同为1;
    a^=b;		//a=a^b;
    

按位运算符的替代表示:

标准表示替代表示
&bitand
&=and_eq
|bitor
|=or_eq
~compl
xor
^=xor_eq
a^=b;		//a=a xor b;
b=~a&b;		//b=compl a bitand b;

常用的按位运算符技术:

  • lottabits表示一个值;
  • bit表示特定位的值,第n位的值为2^n;即术语位(bit)表示2的幂;
  1. 打开位: 将bit位从0或1修改为1

    lottabits=lottabits|bit;
    lottabits|=bit;
    //解释:
    	//假设:lottabits=01100101;bit=3=2^3即bit=1000;
    //则:lottabits|bit=  01100101		  OR 
    //                   00001000
    //=                  01101101
    //将第3位从0变为1
    
  2. 切换位:

    • 将打开的bit位关闭,即1变0;
    • 将关闭的bit位打开,即0变1;
    lottabits^=bit;		//lottabits=lottabits^bit;
    
  3. 关闭位:

    • 关闭相应的位:
    lottabits=lottabits & ~bit;
    lottabits&=~bit;
    
  4. 测试位的值:

    • 确定bit位是否为1;
    //1.
    	if(lottabits==bit)	//大多数情况下不管用
    //2.
    	if(lottabits & bit==bit)
    //3.
        if(lottabits & bit)		//2的简化版