网站开发编译器,wordpress 让置顶显示在分类目前,精通网站建设 pdf,做网站可以不写代码位运算应用口诀和实例 位运算应用口诀 清零取反要用与#xff0c;某位置一可用或若要取反和交换#xff0c;轻轻松松用异或移位运算要点 1 它们都是双目运算符#xff0c;两个运算分量都是整形#xff0c;结果也是整形。 2 左移#xff1a;右边空出…位运算应用口诀和实例 位运算应用口诀 清零取反要用与某位置一可用或若要取反和交换轻轻松松用异或移位运算要点 1 它们都是双目运算符两个运算分量都是整形结果也是整形。 2 左移右边空出的位上补0左边的位将从字头挤掉其值相当于乘2。 3 右移右边的位被挤掉。对于左边移出的空位如果是正数则空位补0若为负数可能补0或补1这取决于所用的计算机系统。 4 运算符右边的位被挤掉对于左边移出的空位一概补上0。位运算符的应用 (源操作数s 掩码mask)(1) 按位与-- 1 清零特定位 (mask中特定位置0其它位为1ssmask)2 取某数中指定位 (mask中特定位置1其它位为0ssmask)(2) 按位或-- | 常用来将源操作数某些位置1其它位不变。 (mask中特定位置1其它位为0 ss|mask)(3) 位异或-- ^1 使特定位的值取反 (mask中特定位置1其它位为0 ss^mask)2 不引入第三变量交换两个变量的值 (设 aa1,bb1) 目 标 操 作 操作后状态aa1^b1 aa^b aa1^b1,bb1ba1^b1^b1 ba^b aa1^b1,ba1ab1^a1^a1 aa^b ab1,ba1二进制补码运算公式-x ~x 1 ~(x-1)~x -x-1 -(~x) x1~(-x) x-1xy x - ~y - 1 (x|y)(xy) x-y x ~y 1 (x|~y)-(~xy) x^y (x|y)-(xy)x|y (x~y)yxy (~x|y)-~xxy: ~(x-y|y-x)x!y: x-y|y-xx y: (x-y)^((x^y)((x-y)^x))xy: (x|~y)((x^y)|~(y-x))x y: (~xy)|((~x|y)(x-y))//无符号x,y比较xy: (~x|y)((x^y)|~(y-x))//无符号x,y比较应用举例(1) 判断int型变量a是奇数还是偶数 a1 0 偶数 a1 1 奇数(2) 取int型变量a的第k位 (k0,1,2……sizeof(int))即ak1(3) 将int型变量a的第k位清0即aa~(1k)(4) 将int型变量a的第k位置1 即aa|(1k)(5) int型变量循环左移k次即aak|a16-k (设sizeof(int)16)(6) int型变量a循环右移k次即aak|a16-k (设sizeof(int)16)(7)整数的平均值对于两个整数x,y如果用 (xy)/2 求平均值会产生溢出因为 xy 可能会大于INT_MAX但是我们知道它们的平均值是肯定不会溢出的我们用如下算法int average(int x, int y) //返回X,Y 的平均值{ return (xy)((x^y)1);}(8)判断一个整数是不是2的幂,对于一个数 x 0判断他是不是2的幂boolean power2(int x){ return ((x(x-1))0)(x!0)}(9)不用temp交换两个整数void swap(int x , int y){ x ^ y; y ^ x; x ^ y;}(10)计算绝对值int abs( int x ) {int y ;y x 31 ;return (x^y)-y ; //or: (xy)^y}(11)取模运算转化成位运算 (在不产生溢出的情况下) a % (2^n) 等价于 a (2^n - 1)(12)乘法运算转化成位运算 (在不产生溢出的情况下) a * (2^n) 等价于 a n(13)除法运算转化成位运算 (在不产生溢出的情况下) a / (2^n) 等价于 a n 例: 12/8 123(14) a % 2 等价于 a 1 (15) if (x a) x b; else x a; 等价于 x a ^ b ^ x;(16) x 的 相反数 表示为 (~x1) 实例 功能 | 示例 | 位运算---------------------------------------------------------------------去掉最后一位 | (101101-10110) | x 1在最后加一个0 | (101101-1011010) | x 1在最后加一个1 | (101101-1011011) | x 11把最后一位变成1 | (101100-101101) | x | 1把最后一位变成0 | (101101-101100) | x | 1-1最后一位取反 | (101101-101100) | x ^ 1把右数第k位变成1 | (101001-101101,k3) | x | (1 (k-1))把右数第k位变成0 | (101101-101001,k3) | x ~ (1 (k-1))右数第k位取反 | (101001-101101,k3) | x ^ (1 (k-1))取末三位 | (1101101-101) | x 7取末k位 | (1101101-1101,k5) | x ((1 k)-1)取右数第k位 | (1101101-1,k4) | x (k-1) 1把末k位变成1 | (101001-101111,k4) | x | (1 k-1)末k位取反 | (101001-100110,k4) | x ^ (1 k-1)把右边连续的1变成0 | (100101111-100100000) | x (x1)把右起第一个0变成1 | (100101111-100111111) | x | (x1)把右边连续的0变成1 | (11011000-11011111) | x | (x-1)取右边连续的1 | (100101111-1111) | (x ^ (x1)) 1去掉右起第一个1的左边 | (100101000-1000) | x (x ^ (x-1))判断奇数 (x1)1判断偶数 (x1)0 转载于:https://www.cnblogs.com/chaobao/archive/2012/02/16/2354030.html