不用加减乘除做加法

不用加减乘除做加法

描述

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

这里就要位运算了,首先来了解下四个位运算符。

  • ^ 异或运算,两个位相同则为 0,不同则为 1。
    • 可用于计算 将整数A转换为B,需要改变多少个bit位
    • 可用于数组中,只有一个数出现一次,剩下都出现两次,找出出现一次的数
  1 0 0 1 1
^ 1 1 0 0 1
-----------------------------
  0 1 0 1 0
  • & 与运算。两位同为 1 才为 1 。否者为0.
    • 可用于检测是否是2的次幂。
    • 可用于统计二进制数中存在多少个1.
  • >><<。左移或右移进位。

之后看本题,做加法,需要考虑进位,就分为两种情况。

  • 两位都是 1,需要进位。
  • 否者直接相加。

所以可以

  • 通过 ^运算统计出哪些二进制位只有一个1,无需进位。
  • 通过 &查看哪些二进制位都是1,需要进位1位。
  • 循环处理,直到没有进位位了。

实现:

public int Add(int num1,int num2) {
        while( num2 != 0 ){
            int sum = num1 ^ num2;
            int carray = (num1 & num2) << 1;
            num1 = sum;
            num2 = carray;
        }
        return num1;
    }
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇