最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c語(yǔ)言中用位運(yùn)算實(shí)現(xiàn)加法技巧介紹

 更新時(shí)間:2012年11月24日 15:10:03   作者:  
用位運(yùn)算實(shí)現(xiàn)加法也就是計(jì)算機(jī)用二進(jìn)制進(jìn)行運(yùn)算,32位的CPU只能表示32位內(nèi)的數(shù),這里先用1位數(shù)的加法來(lái)進(jìn)行,需要的朋友可以參考下

用位運(yùn)算實(shí)現(xiàn)加法也就是計(jì)算機(jī)用二進(jìn)制進(jìn)行運(yùn)算,32位的CPU只能表示32位內(nèi)的數(shù),這里先用1位數(shù)的加法來(lái)進(jìn)行,在不考慮進(jìn)位的基礎(chǔ)上,如下

復(fù)制代碼 代碼如下:

1 + 1 = 0
1 + 0 = 1
0 + 1 = 1
0 + 0 = 0

很明顯這幾個(gè)表達(dá)式可以用位運(yùn)算的“^”來(lái)代替,如下
復(fù)制代碼 代碼如下:

1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0

這樣我們就完成了簡(jiǎn)單的一位數(shù)加法,那么要進(jìn)行二位的加法,這個(gè)方法可行不可行呢?肯定是不行的,矛盾就在于,如何去
獲取進(jìn)位?要獲取進(jìn)位我們可以如下思考:
復(fù)制代碼 代碼如下:

0 + 0 = 0
1 + 0 = 0
0 + 1 = 0
1 + 1 = 1

//換個(gè)角度看就是這樣
復(fù)制代碼 代碼如下:

0 & 0 = 不進(jìn)位
1 & 0 = 不進(jìn)位
0 & 1 = 不進(jìn)位
1 & 1 = 進(jìn)位

正好,在位運(yùn)算中,我們用“<<”表示向左移動(dòng)一位,也就是“進(jìn)位”。那么我們就可以得到如下的表達(dá)式
復(fù)制代碼 代碼如下:

//進(jìn)位可以用如下表示:
(x&y)<<1

到這里,我們基本上擁有了這樣兩個(gè)表達(dá)式
復(fù)制代碼 代碼如下:

x^y //執(zhí)行加法
(x&y)<<1 //進(jìn)位操作

我們來(lái)做個(gè)2位數(shù)的加法,在不考慮進(jìn)位的情況下
復(fù)制代碼 代碼如下:

11+01 = 100 // 本來(lái)的算法
// 用推算的表達(dá)式計(jì)算
11 ^ 01 = 10
(11 & 01) << 1 = 10
//到這里 我們用普通的加法去運(yùn)算這兩個(gè)數(shù)的時(shí)候就可以得到 10 + 10 = 100
//但是我們不需要加法,所以要想別的方法,如果讓兩個(gè)數(shù)再按剛才的算法計(jì)算一次呢
10 ^ 10 = 00
(10 & 10) << 1 = 100

到這里基本上就得出結(jié)論了,其實(shí)后面的那個(gè) “00” 已經(jīng)不用再去計(jì)算了,因?yàn)榈谝粋€(gè)表達(dá)式就已經(jīng)算出了結(jié)果。
繼續(xù)推理可以得出三位數(shù)的加法只需重復(fù)的計(jì)算三次得到第一個(gè)表達(dá)式的值就是計(jì)算出來(lái)的結(jié)果。
c代碼如下:
復(fù)制代碼 代碼如下:

int Add(int a,int b)
{
int jw=a&b;
int jg=a^b;
while(jw)
{
int t_a=jg;
int t_b=jw<<1;
jw=t_a&t_b;
jg=t_a^t_b;
}
return jg;
}

計(jì)算機(jī)本質(zhì)是二進(jìn)制運(yùn)算,許多高人和天書(shū)都展示了如何用位運(yùn)算來(lái)實(shí)現(xiàn)讓人糾結(jié)卻又驚奇的事情。在豆瓣上看到一篇日志描述如何用位運(yùn)算實(shí)現(xiàn)乘法,其實(shí)問(wèn)題解決的關(guān)鍵是如何用位運(yùn)算實(shí)現(xiàn)加法。覺(jué)得原文敘述不夠精確,現(xiàn)總結(jié)如下。
定理1:設(shè)a,b為兩個(gè)二進(jìn)制數(shù),則a+b = a^b + (a&b)<<1。
證明:a^b是不考慮進(jìn)位時(shí)加法結(jié)果。當(dāng)二進(jìn)制位同時(shí)為1時(shí),才有進(jìn)位,因此 (a&b)<<1是進(jìn)位產(chǎn)生的值,稱(chēng)為進(jìn)位補(bǔ)償。將兩者相加便是完整加法結(jié)果。
定理2:使用定理1可以實(shí)現(xiàn)只用位運(yùn)算進(jìn)行加法運(yùn)算。
證明:利用定理1中的等式不停對(duì)自身進(jìn)行迭代。每迭代一次,進(jìn)位補(bǔ)償右邊就多一位0,因此最多需要加數(shù)二進(jìn)制位長(zhǎng)度次迭代,進(jìn)位補(bǔ)償就變?yōu)?,這時(shí)運(yùn)算結(jié)束。

相關(guān)文章

  • C++深入講解namespace與string關(guān)鍵字的使用

    C++深入講解namespace與string關(guān)鍵字的使用

    namespace命名空間或者叫名字空間,傳統(tǒng)的c++只有一個(gè)全局的namespace,namespace引入了復(fù)雜性。namespace允許像類(lèi),對(duì)象,函數(shù)聚集在一個(gè)名字下。本質(zhì)上講namespace是對(duì)全局作用域的細(xì)分
    2022-05-05
  • C語(yǔ)言簡(jiǎn)單實(shí)現(xiàn)快速排序

    C語(yǔ)言簡(jiǎn)單實(shí)現(xiàn)快速排序

    快速排序是一種不穩(wěn)定排序,這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言簡(jiǎn)單實(shí)現(xiàn)快速排序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C++中map和vector作形參時(shí)如何給定默認(rèn)參數(shù)?

    C++中map和vector作形參時(shí)如何給定默認(rèn)參數(shù)?

    今天小編就為大家分享一篇關(guān)于C++中map和vector作形參時(shí)如何給定默認(rèn)參數(shù)?,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-04-04
  • C++中引用的使用總結(jié)

    C++中引用的使用總結(jié)

    以下是對(duì)C++中引用的使用進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-10-10
  • c語(yǔ)言單詞本的新增、刪除、查詢按順序顯示功能

    c語(yǔ)言單詞本的新增、刪除、查詢按順序顯示功能

    這篇文章主要介紹了c語(yǔ)言單詞本的新增、刪除、查詢按順序顯示功能,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • Qt實(shí)現(xiàn)圖片移動(dòng)實(shí)例(圖文教程)

    Qt實(shí)現(xiàn)圖片移動(dòng)實(shí)例(圖文教程)

    這學(xué)期實(shí)訓(xùn)的時(shí)候用MFC做過(guò)一個(gè)飛機(jī)大戰(zhàn),很無(wú)聊的東西,一直想用Qt做一個(gè);首先需要解決的問(wèn)題是圖片的移動(dòng),怎么說(shuō)飛機(jī)啊子彈啊都是動(dòng)著的,圖片當(dāng)然要跑起來(lái),感興趣的你可不要走開(kāi)啊
    2013-01-01
  • 簡(jiǎn)單了解C++語(yǔ)言中的二元運(yùn)算符和賦值運(yùn)算符

    簡(jiǎn)單了解C++語(yǔ)言中的二元運(yùn)算符和賦值運(yùn)算符

    這篇文章主要介紹了C++語(yǔ)言中的二元運(yùn)算符和賦值運(yùn)算符,文中列出了可重載的運(yùn)算符列表,需要的朋友可以參考下
    2016-01-01
  • 一文帶你了解C語(yǔ)言中的0長(zhǎng)度數(shù)組(可變數(shù)組/柔性數(shù)組)

    一文帶你了解C語(yǔ)言中的0長(zhǎng)度數(shù)組(可變數(shù)組/柔性數(shù)組)

    眾所周知,?GNU/GCC?在標(biāo)準(zhǔn)的?C/C++?基礎(chǔ)上做了有實(shí)用性的擴(kuò)展,?零長(zhǎng)度數(shù)組(Arrays?of?Length?Zero)?就是其中一個(gè)知名的擴(kuò)展,本文就來(lái)聊聊零長(zhǎng)度數(shù)組的相關(guān)知識(shí)吧
    2023-03-03
  • 深入了解C語(yǔ)言結(jié)構(gòu)化的程序設(shè)計(jì)

    深入了解C語(yǔ)言結(jié)構(gòu)化的程序設(shè)計(jì)

    這篇文章主要介紹了C語(yǔ)言編程中程序的一些基本的編寫(xiě)優(yōu)化技巧,文中涉及到了基礎(chǔ)的C程序內(nèi)存方面的知識(shí),非常推薦!需要的朋友可以參考下
    2021-07-07
  • C語(yǔ)言函數(shù)棧幀解析

    C語(yǔ)言函數(shù)棧幀解析

    下面小編就為大家?guī)?lái)一篇淺談C語(yǔ)言函數(shù)調(diào)用參數(shù)壓棧的相關(guān)問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-09-09

最新評(píng)論

犍为县| 塘沽区| 乌兰浩特市| 会东县| 东台市| 清涧县| 潞西市| 剑河县| 惠来县| 濮阳县| 绥滨县| 读书| 东山县| 翁源县| 瓦房店市| 蒲江县| 电白县| 扬中市| 广河县| 峨眉山市| 于都县| 轮台县| 惠来县| 伊春市| 镇康县| 同江市| 乐至县| 博野县| 乐陵市| 巴楚县| 建阳市| 百色市| 绥滨县| 邹城市| 阿拉尔市| 于都县| 广南县| 道真| 乐安县| 高阳县| 霍林郭勒市|