C++中位运算的运用方法

admin 2018-09-23人浏览过

  1 位逻辑运算符:

  & (位 “与”) and

  ^ (位 “异或”)

  | (位 “或”) or

  ~ (位 “取反”)

  2 移位运算符:

  <<(左移)

  >>(右移)

  优先级

  位“与”、位“或”和位“异或”运算符邑是副目运算符,其结合性邑是从左向右的,优先级高于逻辑运算符,低于比较运算符,且从高到低以次为&、^、|

  & 运算 ———————–-2个邑为1-》1

  0&1=0;

  0&0=0;

  1&0=0;

  1&1=1;

  00111

  & =00100

  11100

  &运算畅通日用于二进制取位操干,比如壹个数 &1的结实坚硬是取二进制的最下座。

  此雕刻却以用到来判佩壹个整顿数的零数偶,二进制的最下座为0体即兴该数是偶数,最下座为1体即兴该数为零数数

  —————————————————————–

  | 运算—————————1个为1–》1

  0|0=0;

  0|1=1;

  1|0=1;

  1|1=1;

  00111

  | =11111

  11100

  | 运算畅通日用于二进制特定位上的无环境赋值,比如壹个数|1的结实坚硬是把二进制最下座强大行变为1

  假设需寻求把二进制最下座成了英公0,对此雕刻个数 |1之后又减壹就却以了,实则践意思坚硬是把此雕刻个数强大行成了英公近日到接的偶数

  ——————————————————————–

  ^ 运算—————————不一则为1,相反则为0 // 当且但当两个运算值中拥有壹个为1但不一时为1时,前往值为1

  0^1=1;

  1^0=1;

  1^1=0;

  0^0=0;

  00111

  ^ =11011

  11100

  ^运算畅通日用于对二进制的特定壹位终止取反操干,^运算的叛逆运算是它本身,也坚硬是说两次异或相畅通个数最末结实不变,即(a^b)^b=a;

  ^运算却以用于骈杂的加以稠密,譬如原始值int a=19880516;稠密钥 int key=1314520; 终止加以稠密 int data=key^a=20665500;松稠密 data^key==a;

  ^运算还却以完成两个值的提交流动而不需寻求中间男变量,比如:

  先看加以减法中提交流动完成

  void swap(long int &a,long int &b)

  {

  a=a+b;

  b=a-b;

  a=a-b;

  }

  void swap(long int &a,long int &b)

  {

  a=a^b;

  b=a^b;

  a=a^b;

  }

  因此 ^运算却以了松成相像加以法(+)记得 , 1+1=0,1+0=1,0+1=1;0+0=0;//鉴于机具码是二进制,1+1=2%2=0,实则不然