成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

如何用位運算實現(xiàn)整數(shù)的加減法

Worktile / 2155人閱讀

摘要:假設(shè),,先把,轉(zhuǎn)化為二進(jìn)制,那么,,二進(jìn)制的加法是逢進(jìn),如果兩個數(shù)的同一位的基數(shù)分別是和,那么這個位上的基數(shù)為如果都是,則基數(shù)為如果都是,則基數(shù)為。

今天刷Leecode刷到第371題:

Sum of Two Integers

Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.

Example:
Given a = 1 and b = 2, return 3.

Credits:
Special thanks to @fujiaozhu for adding this problem and creating all test cases.

Subscribe to see which companies asked this question

題目要求我們在不使用加減操作符的情況下得到兩個整數(shù)的和。由于減法和乘除法都是基于加法操作的,所以此題不能考慮‘+’、‘-’、‘*’、’/‘這四個操作符,我們使用位運算來得到兩個數(shù)的和。
假設(shè)a = 15, b = 9, 先把a,b轉(zhuǎn)化為二進(jìn)制,那么a = 1111,b = 1001,二進(jìn)制的加法是逢2進(jìn)1,如果兩個數(shù)的同一位的基數(shù)分別是0和1,那么這個位上的基數(shù)為1;如果都是1,則基數(shù)為0;如果都是0,則基數(shù)為0。這種方式類似于位運算中的異或,只有兩個數(shù)字不等的時候結(jié)果才為1,那我們是不是可以直接用a ^ b來得到a + b的值呢?當(dāng)然不行,當(dāng)同一位上兩個基數(shù)都為1時,此時該位上的基數(shù)變?yōu)?,但是應(yīng)該在它的左邊一位加1,異或運算并沒有給它加1,所以我們還得把逢2進(jìn)1的那個1加進(jìn)去,01 + 01 = 10,所以兩個數(shù)有一個位上的基數(shù)都是1的時候相加就類似于與運算,但是要把結(jié)果左移一位,因為它是在比它高一位的地方進(jìn)1,相當(dāng)于是乘以2了。于是兩個二進(jìn)制的加法就轉(zhuǎn)化成了兩部分,一部分是兩個數(shù)同一位上的基數(shù)同為1的值,這部分的值用(a & b)<<1 可以得到,另一部分的值可以用異或得到,即 a ^ b,所以 a + b = a ^ b + (a & b)<<1.
在上一例中,

(a & b)<<1 = (1111 & 1001)<<1 = 10010;
 a ^ b = 1111 ^ 1001 = 110;
 a + b = 10010 + 110 = 11000 = 24

完整的代碼如下:

var getSum = function(a, b) {
    //注意"+"的優(yōu)先級大于"<<",所以要先把(a & b)<<1括起來
    var s = (a ^ b) + ((a & b)<<1)
    return s 
};

異或還有一個特點就是,一個整數(shù)與0異或的結(jié)果就等于它自己,它和自己異或等于0,這個結(jié)論能幫我們解決第136題。

[Single Number][2]

Given an array of integers, every element appears twice except for one. Find that single one.

Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

Subscribe to see which companies asked this question

要找出一個數(shù)組里唯一的那個數(shù),這時候我們很自然就想到了異或的特點,即:

a ^ 0 = a
a ^ a = 0
a ^ b ^ a = a ^ a ^ b = 0 ^ b = b

所以這道題我們利用for循環(huán)將數(shù)組里的所有元素異或,最終得到的就是那個只出現(xiàn)了一次的數(shù),代碼如下:

var singleNumber = function(nums) {
    var result = 0
   for(var i = 0; i < nums.length; i++) {
       result = result ^ nums[i] 
   } 
   return result
};

可見有時候位運算的作用也很大呢!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/80542.html

相關(guān)文章

  • 【手把手帶你刷LeetCode】——15.劍指offer之不用加減乘除做加法(運算

    摘要:前言今天是力扣打卡第天天天做遞歸做煩了,換換腦子,嘿嘿。原題不用加減乘除做加法題目描述寫一個函數(shù),求兩個整數(shù)之和,要求在函數(shù)體內(nèi)不得使用四則運算符號。補碼的優(yōu)勢加法減法可以統(tǒng)一處理只有加法器。 【前言】 今天是力扣打卡第15天! 天天做遞歸做煩了,換換腦子,嘿嘿。 原題: 不用加減...

    QLQ 評論0 收藏0
  • 「干貨」細(xì)說 Javascript 中浮點數(shù)精度丟失問題(內(nèi)附好課推薦)

    摘要:前言最近,朋友問了我這樣一個問題在中的運算結(jié)果,為什么是這樣的雖然我告訴他說,這是由于浮點數(shù)精度問題導(dǎo)致的。由于可以用階碼移動小數(shù)點,因此稱為浮點數(shù)。它的實現(xiàn)遵循標(biāo)準(zhǔn),使用位精度來表示浮點數(shù)。 showImg(https://segmentfault.com/img/remote/1460000018981071); 前言 最近,朋友 L 問了我這樣一個問題:在 chrome 中的運算...

    senntyou 評論0 收藏0
  • Javascript 基本概念(操作符)

    摘要:對于有符號的整數(shù),第一位是符號位正數(shù),負(fù)數(shù),后位表示數(shù)值。正數(shù)二進(jìn)制表示,沒有用到的位補,如用二進(jìn)制表示為,第一位是符號位,后位均用補位,是有效位。按位非求反碼,本質(zhì)是求操作數(shù)的負(fù)值減一。 showImg(https://segmentfault.com/img/remote/1460000014827639); 操作符 一元操作符 只能操作一個值的操作符叫一元操作符 ++ and ...

    Paul_King 評論0 收藏0
  • js-數(shù)據(jù)運算

    摘要:跳過第二個運算子的機制,被稱為短路有些程序員喜歡用它取代結(jié)構(gòu)等價于運算符可以多個連用返回第一個布爾值為的表達(dá)式的值。 一、運算符概述 1、定義 JavaScript中運算符主要用于連接簡單表達(dá)式,組成一個復(fù)雜的表達(dá)式 2、運算符類別 算數(shù)運算符 賦值表達(dá)式 比較表達(dá)式 布爾運算符 位運算符 二、算數(shù)運算符 1、加法運算符(Addition):x + y 加法運算符是在運行時決定,到...

    sf190404 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<