不用加减乘除运算符计算两数之和及a=b*3
来源:互联网 发布:用友初始化数据库 编辑:程序博客网 时间:2024/05/18 02:05
不用加减乘除运算符计算两数之和及a=b*3
IT公司的题目如下:
1.不用加减乘除运算符计算两个数字之和
2.不用加减乘除运算符计算a = b * 3
首先这两个题目其实是很相关的,要计算
a = b * 3就是计算a = b *2 + b即a = b << 1 + b。
因此只要解决了不用加减乘除运算符计算两个数字之和,那么不用加减乘除运算符计算a = b * 3也就迎刃而解了。那么怎么不用加减乘除运算符计算两个数字之和了?我们知道在计算5 + 9时,首先不进位的话 5 + 9 = 4,5 + 9的进位为1,然后和就是1 * 10 + 4 = 14。同理放到二进制中也可以采用这样的方法。
运算步骤如下:
设有a = 3,b = 6。
a 0011
b 0110
不进位和 0101 = 5
进位 0010 = 2
因此 a + b就变成了5 + 2 << 1
然后有
5 0101
2<<1 0100
不进位和 0001 = 1
进位 0100 = 4
因此 a + b就变成了1 + 4 << 1
然后有
1 0001
4<<1 1000
不进位和 1001 = 9
进位 0000 = 0
当时进位为0时,不进位和为9即a + b之和。
代码如下:#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int BitAdd(int a,int b)
{
int nCarry=a&b;
int nSumNoCarry=a^b;
if(nCarry!=0)
return BitAdd(nSumNoCarry,nCarry<<1);
else
return nSumNoCarry;
}
int BitMultiplication(int a)
{
return BitAdd(a<<1,a);
}
int main()
{
srand(time(NULL));//随机产生种子
const int MAXNUMBER=100;
int a=rand()%MAXNUMBER,b=rand()%MAXNUMBER;
printf("\n ---------位操作之加法------------");
printf("%d+%d=%d\n",a,b,BitAdd(a,b));
printf("\n ---------位操作之a=b*3------------");
printf("%d*3=%d\n",a,BitMultiplication(a));
return 0;
}
#include<stdlib.h>
#include<time.h>
int BitAdd(int a,int b)
{
int nCarry=a&b;
int nSumNoCarry=a^b;
if(nCarry!=0)
return BitAdd(nSumNoCarry,nCarry<<1);
else
return nSumNoCarry;
}
int BitMultiplication(int a)
{
return BitAdd(a<<1,a);
}
int main()
{
srand(time(NULL));//随机产生种子
const int MAXNUMBER=100;
int a=rand()%MAXNUMBER,b=rand()%MAXNUMBER;
printf("\n ---------位操作之加法------------");
printf("%d+%d=%d\n",a,b,BitAdd(a,b));
printf("\n ---------位操作之a=b*3------------");
printf("%d*3=%d\n",a,BitMultiplication(a));
return 0;
}
参考:http://blog.csdn.net/morewindows/article/details/8710737#comments
- 不用加减乘除运算符计算两数之和及a=b*3
- 不用加减乘除运算符计算两数之和及a=b*3
- 两个常见位操作面试题 不用加减乘除运算符计算两数之和及a=b*3
- 两个常见位操作面试题 不用加减乘除运算符计算两数之和及a=b*3
- 两个常见位操作面试题 不用加减乘除运算符计算两数之和及a=b*3
- 两个常见位操作面试题:不用加减乘除运算符计算两数之和及a=b*3
- 两个常见位操作面试题 不用加减乘除运算符计算两数之和及a=b*3
- 不用加减乘除运算符计算两数之和
- 371. Sum of Two Integers, 不用加减乘除运算符计算两数之和
- 【算法题】不使用加减乘除符号计算两数之和a+b
- 【计算两数之和】不使用加减乘除
- 两数之和a+b
- 不用比较运算符及循环控制语句,判断int型的a、b两数的大小
- 不用比较运算符及循环控制语句,判断int型的a、b两数的大小
- 不用比较运算符及循环控制语句,判断int型的a、b两数的大小
- 不用比较运算符及循环控制语句,判断int型的a、b两数的大小
- 不用比较运算符,判断int型的a,b两数的大小的答案
- 不用比较运算符,判断int型的a,b两数的大小。
- cmd控制台下的编码方式
- 经典电影收藏
- opencv-线,椭圆,长方形(矩形),圆,填充多边形绘制
- Oracle 中的JOIN
- [翻译][php扩展开发和嵌入式]第9章-资源数据类型
- 不用加减乘除运算符计算两数之和及a=b*3
- 通达信公式函数
- 第3堂作业
- uva10132 - File Fragmentation(文件碎片)
- Percona Xtrabackup MySQL 全备
- 恭喜!麻省理工两密码学教授获2012图灵奖
- oracle知识点总结
- MySQLl虚拟表
- Andorid添加CCEditBox控件编译报错