在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何用C語言的位運算實現加法操作詳解

STM32嵌入式開發 ? 來源:STM32嵌入式開發 ? 作者:STM32嵌入式開發 ? 2021-04-13 10:23 ? 次閱讀

分享本文,希望能起到拋磚引玉的作用,加深朋友對位運算以及計算機底層的認識。

有如下十進制的加法運算:

13 + 9 = 22

我們像這樣來拆分這個運算過程:

不考慮進位,分別對各位數進行相加,結果為sum:

個位數3加上9為2;十位數1加上0為1;最終結果為12;

只考慮進位,結果為carry:

3 + 9 有進位,進位的值為10;

如果步驟2所得進位結果carry不為0,對步驟1所得sum,步驟2所得carry重復步驟1、 2、3;如果carry為0則結束,最終結果為步驟1所得sum:

這里即是對sum = 12 和carry = 10重復以上三個步驟,(a) 不考慮進位,分別對各位數進行相加:sum = 22; (b) 只考慮進位: 上一步沒有進位,所以carry = 0;(c) 步驟2carry = 0,結束,結果為sum = 22。

把上面的運算過程放在二進制中試試。

13和9的二進制分別為:

0000 11010000 1001

①不考慮進位,分別對各位數進行相加得到sum:?

0000 0100

②當考慮進位,有兩處進位,第0位和第3位,只考慮進位的結果為carry:

0001 0010

③判斷carry是否為0,為0則結束,最終計算結果為sum;如果carry不為0,則進行如下操作,并重復步驟①②③:

sum+=carry

上面步驟③中判斷carry不為0,回到步驟①:

不考慮進位,sum+carry= :

0001 0110

步驟②:

只考慮進位,carry =:

0

步驟③:

判斷carry為0,結束,最終sum=:

0001 0110

轉換成十進制剛好是22,十進制的算法同樣適用于二進制!

仔細觀察發現:

第①步不考慮進位的加法其實就是異或運算

第②步只考慮進位就是按位與運算之后左移一位

第③步就是重復前面兩步操作,直到第二步進位結果為0

這里為什么要循環步驟①②③,直到步驟②所得進位carry等于0呢?這是因為有的數做加法時會出現連續進位的情況。在第③步檢測carry如果為0,則表示沒有進位了,此時,此次循環第①步的sum即為最終的結果。

通過位運算實現加法

按照上面的分析,寫出通過位運算實現加法的如下代碼:

// 遞歸寫法 int add(int num1, int num2){if(num2 == 0) return num1;int sum = num1 ^ num2;int carry = (num1 & num2) 《《 1;return add(sum, carry);}

// 迭代寫法 int add(int num1, int num2){ int sum = num1 ^ num2; int carry = (num1 & num2) 《《 1; while(carry != 0){ int a = sum; int b = carry; sum = a ^ b; carry = (a & b) 《《 1; }return sum;}
編輯:lyn

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7628

    瀏覽量

    139793
  • 位運算
    +關注

    關注

    0

    文章

    17

    瀏覽量

    8518

原文標題:通過C語言的位運算實現加法操作

文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    全套C語言培訓資料—PPT課件

    與共用體、運算、文件 全套C語言培訓資料,共427頁,13個章節:C語言概述、程序的靈魂—算
    發表于 03-12 14:50

    Verilog中signed和$signed()的用法

    嗎?其實不是的,因為有符號數和無符號數據的加法強結果和乘法器結構是一樣的,signed的真正作用是決定如何對操作數擴的問題。 2、verilog中的加法和乘法
    的頭像 發表于 02-17 17:47 ?409次閱讀
    Verilog中signed和$signed()的用法

    FPGA中的浮點四則運算是什么

    (減)法運算 基于FPGA 實現的浮點加法運算包括了一系列對尾數和指數部分的操作:移位、交換、格式化、舍入和格式化等。如下圖所示,自定義浮點
    的頭像 發表于 11-16 12:51 ?715次閱讀
    FPGA中的浮點四則<b class='flag-5'>運算</b>是什么

    FPGA中浮點四則運算實現過程

    (減)法運算 基于FPGA 實現的浮點加法運算包括了一系列對尾數和指數部分的操作:移位、交換、格式化、舍入和格式化等。如下圖所示,自定義浮點
    的頭像 發表于 11-16 11:19 ?1138次閱讀
    FPGA中浮點四則<b class='flag-5'>運算</b>的<b class='flag-5'>實現</b>過程

    C語言指針運算詳解

    C語言中,當你有一個指向數組中某個元素的指針時,你可以對該指針執行某些算術運算,例如加法或減法。這些運算可以用來遍歷數組中的元素,如ptr
    的頭像 發表于 10-30 11:16 ?564次閱讀

    技術干貨驛站 ▏解鎖C語言高效編程秘訣:深入解析運算符與優先級

    C語言的學習過程中,運算符的使用是不可忽視的重要環節。本文將繼續深入探討C語言中的運算符,重點
    的頭像 發表于 10-13 08:09 ?475次閱讀
    技術干貨驛站 ▏解鎖<b class='flag-5'>C</b><b class='flag-5'>語言</b>高效編程秘訣:深入解析<b class='flag-5'>運算</b>符與優先級

    技術干貨驛站 ▏深入理解C語言:編程高手必備,全方位解析運算符的核心技能!

    C語言的編程領域中,運算符是實現數據處理與邏輯操作的關鍵工具。無論是在處理簡單的數值計算,還是在構建復雜的邏輯結構時,
    的頭像 發表于 09-18 15:56 ?598次閱讀
    技術干貨驛站 ▏深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:編程高手必備,全方位解析<b class='flag-5'>運算</b>符的核心技能!

    加法運放電路實驗報告數據分析

    加法運放電路實驗報告的數據分析主要包括對實驗結果的觀察、與理論值的對比以及誤差原因的分析。以下是一個基于常見加法運放電路實驗的數據分析示例: 一、實驗目的與原理 實驗目的 :了解加法器的模擬
    的頭像 發表于 09-03 10:03 ?1375次閱讀

    c語言從右到左的運算符有哪些

    以下是一些主要的從右到左運算C語言運算符: 函數調用運算符 ( () ):當您調用一個函數時,參數列表是從右到左進行求值的。 后置遞增
    的頭像 發表于 08-20 11:39 ?1576次閱讀

    請問全差分運算放大器能像一般運算放大器一樣設計加法器嗎?

    全差分運算放大器能像一般運算放大器一樣設計加法器嗎?
    發表于 08-09 06:26

    何用C語言實現高效查找(二分法)

    今天給分享一下使用C語言實現二分算法,主要包含以下幾部分內容:二分查找算法介紹二分查找算法使用場景二分查找算法代碼實現二分查找算法實現過程用C
    的頭像 發表于 06-04 08:04 ?1565次閱讀
    如<b class='flag-5'>何用</b><b class='flag-5'>C</b><b class='flag-5'>語言實現</b>高效查找(二分法)

    串行加法器和并行加法器的區別?

    串行加法器和并行加法器是兩種基本的數字電路設計,用于執行二進制數的加法運算。它們在設計哲學、性能特點以及應用場景上有著明顯的區別。
    的頭像 發表于 05-23 15:06 ?3512次閱讀

    加法器的原理是什么 加法器有什么作用

    加法器是數字電路中的基本組件之一,用于執行數值的加法運算加法器的基本原理和作用可以從以下幾個方面進行詳細闡述。
    的頭像 發表于 05-23 15:01 ?4598次閱讀
    <b class='flag-5'>加法</b>器的原理是什么 <b class='flag-5'>加法</b>器有什么作用

    同相加法器和反相加法器的區別是什么

    同相加法器和反相加法器是運算放大器在模擬電路設計中常用的兩種基本電路結構,它們在信號處理方面有著不同的特性和應用場景。
    的頭像 發表于 05-23 14:35 ?3801次閱讀

    使用C語言實現的CRC計算單元的例子

    使用C語言實現的CRC計算單元的例子
    的頭像 發表于 05-16 16:16 ?1366次閱讀
    主站蜘蛛池模板: 涩综合 | 五月婷婷久 | 免费视频一区 | 午夜免费啪视频 | 欧美色婷婷天堂网站 | 四只虎免费永久观看 | 色五月婷婷成人网 | 中文字幕乱码人成乱码在线视频 | 国产免费一级高清淫曰本片 | 成人男女啪啪免费观看网站 | 天天干天天舔天天操 | 成人午夜亚洲影视在线观看 | 凹厕所xxxxbbbb偷拍视频 | 电影天堂在线观看三级 | 女人被男人免费播放网站 | 欧美又黄又嫩大片a级 | 香蕉视频黄色在线观看 | 欧美视频免费一区二区三区 | 天天视频官网天天视频在线 | 天天在线免费视频 | 日韩a无吗一区二区三区 | 在线观看视频网站 | 色视频在线观看在线播放 | 波多野结衣在线观看一区二区三区 | h黄色| 久久99精品久久久久久秒播 | 在线小视频你懂的 | 天天操夜夜嗨 | 人人射人人草 | 欧美色欧美亚洲高清在线视频 | 俄罗斯久久 | 欧美乱妇高清无乱码 | 亚洲三级在线免费观看 | 天天草夜夜草 | 亚洲在线a | 天天干网| 永久精品免费影院在线观看网站 | 欧美很很干 | 97超频国产在线公开免费视频 | 欧美 亚洲 国产 精品有声 | 美女操网站|