用位运算实现四则运算之加、减、乘

来源:互联网 发布:printk源码 编辑:程序博客网 时间:2024/06/05 14:14

听同学百度二面中,不准用四则运算操作符来实现四则运算。一想就想到了计算机组成原理上学过的。

暂时没写除法,过一会补上。

#include <iostream>using namespace std;/*int add(int a, int b){//按位累加,慢,奇慢无比,hdu1000都过不了int c = 0;int flag = 0;int x = 1;while((a>=x) || (b>=x) || flag){c = c | ((a&x) ^ (b&x) ^ flag);if(((a&x) & (b&x)) || ((a&x) & flag) || (flag & (b&x)))flag = (x<<1);elseflag = 0;x = (x<<1);}return c;}*/int add(int a, int b){int t;while(b){//直到没有进位t = a^b;//不带进位加法b = ((a&b)<<1);//进位a = t;}return a;}int negtive(int a){return add(~a, 1);}int sub(int a, int b){return add(a, negtive(b));}int multiply(int a,int b){int ans = 0;while(b){if(b&1)ans = add(ans, a);a = (a<<1);b = (b>>1);}return ans;}int main(){int a, b;while(scanf("%d %d", &a, &b) != EOF){printf("%d\n", multiply(a,b));}return 0;}