国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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語言
    +關注

    關注

    183

    文章

    7644

    瀏覽量

    145561
  • 位運算
    +關注

    關注

    0

    文章

    17

    瀏覽量

    8671

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    探索CD54/74AC283與CD54/74ACT283:高效4二進制加法器的奧秘

    探索CD54/74AC283與CD54/74ACT283:高效4二進制加法器的奧秘 在電子設計領域,加法器是實現數字運算的基礎元件之一。今
    的頭像 發表于 01-28 16:50 ?426次閱讀

    解析CD54/74AC283與CD54/74ACT283:4二進制加法器的卓越之選

    解析CD54/74AC283與CD54/74ACT283:4二進制加法器的卓越之選 在電子設計領域,加法器是實現數字運算的基礎組件。今天我
    的頭像 發表于 01-08 16:55 ?570次閱讀

    C語言主要特點

    。 5.語法限制不太嚴格,程序設計自由度大。 6.C語言允許直接訪問物理地址,能進行(bit)操作,能夠實現匯編語言的大部分功能,可以直接
    發表于 01-05 07:41

    深入剖析CD54/74AC283與CD54/74ACT283:高性能4二進制加法

    /74AC283和CD54/74ACT283是采用先進CMOS邏輯技術的4二進制加法器,能夠快速處理兩個4二進制數的加法運算,并在和超過
    的頭像 發表于 01-04 17:25 ?703次閱讀

    C語言中除數為0屬于什么錯誤

    0 的錯誤,以及援引數組元素時下標溢出等。 靜態錯誤又可以分為語法錯誤和靜態語義錯誤。語法錯誤指有關語言結構上的錯誤,如單詞拼寫錯誤、表達式中缺少操作數、括號不匹配等。靜態語義錯誤指語言意義上錯誤,如
    發表于 12-08 06:38

    為什么單片機還在用C語言編程?

    使用加法、減法、移位運算,不要過多的使用乘法除法,因為乘法和除法運算會非常耗時間,特別是除法,會耗費很多時間,這對于運算速度本身就有限制的單片機來說,是一個非常大的負擔。 二、高級
    發表于 11-28 07:37

    請問如何用C語言列舉當前所有網口?

    何用C語言列舉當前所有網口?
    發表于 11-25 07:23

    C語言操作

    C 語言操作符包括按與( )、按或(|)、按
    發表于 11-21 07:52

    復雜的軟件算法硬件IP核的實現

    ,該模塊對應于 C 語言加法運算符。還有連接 ALU8 以及各個端口的 wire 部件等。 從 begin 到 end 部分,包含了整個函數實現
    發表于 10-30 07:02

    第4章 C語言基礎以及流水燈的實現(4.3 4.4)

    4.3 C語言基本運算符 小學數學學過加、減、乘、除等運算符號以及四則混合運算,而這些運算符號在
    的頭像 發表于 10-29 15:30 ?331次閱讀

    定點數表示實數的方法以及定點數在硬件上的運算驗證

    ,Vivado就能將后續有符號數運算綜合成相應電路(與C語言不同,Verilog規定,無符號數與有符號數運算,會將有符號數視為無符號數)。以下述RTL代碼所示有符號Q15定點數乘法為例
    發表于 10-28 08:13

    RVB 操作指令集擴展(一)

    一、B擴展簡介 B擴展,即bit-manipulation (bitmanip) extension,主打增強操作的指令集。B擴展定義了RV32-64下的操作指令。為了更精準地在領
    發表于 10-22 08:11

    e203乘法運算結構及算法原理

    乘法運算。 考慮到E203的定位以及性能、功耗與芯片面積的平衡,E203采用了一些恰到好處的資源復用設計。 首先,乘法器每周器中的加法操作是通過復用ALU中的加法
    發表于 10-22 06:43

    e203 ALU乘法運算結構及算法原理

    乘法運算。 考慮到E203的定位以及性能、功耗與芯片面積的平衡,E203采用了一些恰到好處的資源復用設計。 首先,乘法器每周器中的加法操作是通過復用ALU中的加法
    發表于 10-22 06:12

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

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