日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

371. 两整数之和

發布時間:2025/3/21 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 371. 两整数之和 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 題目

不使用運算符?+?和?-????????,計算兩整數????????a?、b????????之和。

示例 1:

輸入: a = 1, b = 2 輸出: 3

示例 2:

輸入: a = -2, b = 3 輸出: 1

2. 分析

  在不采用加法和減法的前提下計算兩整數之和,這需要使用與運算符和異或運算符,首先,利用與運算 a & b,計算出 a 和 b 所有進位的位置,然后將其左移一位,這樣可以得到所有需要進位的值進位后最終的位置。然后利用異或運算 a ^ b,由于異或運算下相同位為0,不同位為1,所以可以獲取到 a + b 的不進位下的值。其次,如果是涉及到負數的加法,由于計算機運算都是采用補碼,正數的補碼為它本身,負數的補碼為其取反再加一,符號位不變,所以負數的加法在計算機底層實現的時候與正數的加法是一致的。

  舉個例子,6 + 3,轉換成二進制就是 110 + 011,計算出需要進位的值 carry 為 (a & b) << 1 = 100, 不需要進位的值 nocarry 為 a ^ b = 101,首先需要判斷 carry 和 nocarry 之間相加的情況是否會產生進位,即求出 carry & nocarry 的值是否為 0, 不為 0 的話說明需要再次進位,100 & 101 = 100 不為 0,所以先保存 nocarry 的值到 tmp ,再重新計算 nocarry 的值 即 nocarry = carry ^ nocarry ,然后計算新的 carry 值? carry = tmp & carry,然后再對新的 carry 和 nocarry 進行之前的判斷,直到 carry 值為 0,這時返回nocarry即可。

3. 實現

class Solution { public:int getSum(int a, int b) {int sum = a ^ b;int carry = ((unsigned int)a & b) << 1;while(carry != 0){int tmp = carry;carry = ((unsigned int)sum & carry) << 1;sum ^= tmp;}return sum;} };

?

轉載于:https://www.cnblogs.com/lawliet12/p/10800905.html

總結

以上是生活随笔為你收集整理的371. 两整数之和的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。