位运算实现加减乘除
2013-06-26 13:35
316 查看
#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)); else return negative(multi_help(negative(a),b)); } else { if(isNegative(b)) return negative(multi_help(a,negative(b))); else return 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)); else return negative(div_help(negative(a),b)); } else { if(isNegative(b)) return negative(div_help(a,negative(b))); else return 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; }转载自:http://blog.csdn.net/xinhanggebuguake/article/details/7475804
相关文章推荐
- 用位运算实现两个整数的加减乘除运算
- java实现两个数的加减乘除和平方运算
- 如何只用逻辑运算实现算术加减乘除运算
- 数学问题——位运算实现加减乘除
- 不使用 +-×÷ 运算符来实现 加减乘除 四项运算
- 位操作实现加减乘除四则运算
- 位运算实现加减乘除
- 位运算实现加减乘除运算
- 用位运算实现四则运算之加减乘除
- 第八周实验报告任务3 实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除,求反,比较6种关系的运算。
- 正整数加减乘除四则混合运算求值方法 java实现
- c++第八周【任务3】实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、求反、比较(6种关系)的运算。
- 用位运算实现两个整数的加减乘除运算
- c语言:编写一个简易计算器,打印菜单界面,实现加减乘除运算,可以退出菜单界面
- 用位运算实现两个整数的加减乘除运算
- No.3 (code review)复杂计算器(实现8位以内的连续加减乘除运算---可能有BUG,还希望多多帮忙改善!)
- 位操作实现加减乘除四则运算
- java BigDecimal实现精确加减乘除运算(例如:京东结算)
- 不使用 +-×÷ 运算符来实现 加减乘除 四项运算
- 用位运算实现四则运算之加减乘除(用位运算求一个数的1/3)