剑指Offer解题报告(Java版)——不用加减乘除做加法 47
2015-05-03 19:50
537 查看
引言
一般这种不能用四则运算的题都只有用位运算来做,目的是加强大家对计算机计算的理解,真是有点扯淡呢
解决问题
首先我们得思考计算机是怎样做加法的呢,比如3加4,如果转换成二进制是0011和0100,加起来是7,也就是0111,相当于是两个二进制的异或运算
但是我们再举一个例子就是4加4,会发现,两个二进制是0100和0100,异或运算的话结果为0000,但是我们想要的是1000,这是因为异或运算没有考虑到进位的问题,看来我们还要用一个运算去考虑进位的问题,还记得进位是怎样算的吗,如果两个树相同位上都是1,那么就是要进位,这实际上就是与操作
而最后我们需要把进位和没考虑进位的sum加起来,这里又不能用到sum,摔,此时我们又要用到之前讲的与和异或操作,这里我们取巧,就把sum赋值给n1,把carry赋值给n2,去算,停止的条件是n2==0,也就是没有进位了
static int add(int n1,int n2){
int sum=0;
int carry=0;
do {
sum=n1^n2;
carry=(n1&n2)<<1;
n1=sum;
n2=carry;
} while (n2!=0);
return sum;
相关文章推荐
- 【剑指offer-Java版】47不用加减乘除做加法
- 剑指Offer面试题47(Java版):不用加减乘除做加法
- [剑指Offer 47] 不用加减乘除做加法(Java)
- 剑指Offer面试题47:不用加减乘除做加法 Java实现
- 【剑指Offer学习】【面试题47:不用加减乘除做加法】
- 剑指Offer 47 不用加减乘除做加法
- 【面试题】剑指Offer-47-不用加减乘除做加法
- 【剑指Offer学习】【面试题47:不用加减乘除做加法】
- 【剑指offer】6.5发散思维能力——面试题47:不用加减乘除做加法
- 【剑指Offer】面试题47:不用加减乘除做加法
- 剑指offer 面试题47—不用加减乘除做加法
- [剑指offer][面试题47]不用加减乘除做加法
- 【剑指offer-解题系列(49)】不用加减乘除做加法
- 剑指offer——面试题47:不用加减乘除做加法
- 剑指Offer47 不用加减乘除做加法
- 【剑指offer 面试题47】不用加减乘除做加法
- 剑指Offer:面试题47 不用加减乘除做加法
- 剑指offer47 不用加减乘除做加法
- 剑指offer-47:不用加减乘除做加法
- 剑指offer 面试题47 不用加减乘除做加法