1、int变量的奇偶性(变量A)
A&1 = 0 (偶数)
A&1 = 1 (奇数)
2、int变量第K位的操作。(变量A)
(A>>K)&1 (比特位)
A=A|(1<
(A & B) + ( (A ^ B) >> 1)
4、是否为2的整数次幂(变量A)
(x != 0) && (A & (A - 1)) == 0)
5、两整型变量的交换(变量A、B)
B ^=A;
A ^= B;
B ^= A;
6、计算整数的绝对值(变量A)
( (A ^ (A>>31)) - (A>>31) );
7、求相反数(变量A)
~A + 1
8、实现整数的加减乘除
点击打开链接
#include <stdio.h>#include <limits.h>//加法运算int add(int a, int b){return b==0 ? a: add(a^b,(a&b)<<1);}//补码中正数转负数的原理int negative(int a){return add(1,~a);}//减法运算int sub(int a,int b){return add(a,negative(b));}//判断正负bool isNegative(int a){return (a&INT_MIN)!=0; //INT_MIN只有最高位为1,其余位为0}//仅计算正数乘法int multi_help(int a,int b){int result= 0;while(b){if(b&1) result = add(result, a);a <<=1;b >>= 1;}return result;}//乘法int multi(int a,int b){if(isNegative(a)){if(isNegative(b))return multi_help(negative(a),negative(b));elsereturn negative(multi_help(negative(a),b));}else{if(isNegative(b))return negative(multi_help(a,negative(b)));elsereturn multi_help(a,b);}}//仅计算正数除法int div_help(int a,int b){if(a<b) return 0;if(a==b) return 1;int result=0;//第32位为符号位,所以从第31位开始for(int i=30;i>=0;i--){if((a>>i)>=b){result=add(result,1<<i);a=sub(a,b<<i);}}return result;}//除法int div(int a,int b){if(isNegative(a)){if(isNegative(b))return div_help(negative(a),negative(b));elsereturn negative(div_help(negative(a),b));}else{if(isNegative(b))return negative(div_help(a,negative(b)));elsereturn div_help(a,b);}}int main(void){int a,b;a=-30;b=-5;printf("ADD:%d,SUB:%d,MULTI:%d,DIV:%d",add(a,b),sub(a,b),multi(a,b),div(a,b));return 0;}
