91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

3天內(nèi)不再提示

如何用C語言的位運算實現(xiàn)加法操作詳解

STM32嵌入式開發(fā) ? 來源:STM32嵌入式開發(fā) ? 作者:STM32嵌入式開發(fā) ? 2021-04-13 10:23 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

13 + 9 = 22

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

不考慮進位,分別對各位數(shù)進行相加,結(jié)果為sum:

個位數(shù)3加上9為2;十位數(shù)1加上0為1;最終結(jié)果為12;

只考慮進位,結(jié)果為carry:

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

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

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

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

13和9的二進制分別為:

0000 11010000 1001

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

0000 0100

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

0001 0010

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

sum+=carry

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

不考慮進位,sum+carry= :

0001 0110

步驟②:

只考慮進位,carry =:

0

步驟③:

判斷carry為0,結(jié)束,最終sum=:

0001 0110

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

仔細觀察發(fā)現(xiàn):

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

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

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

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

通過位運算實現(xiàn)加法

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

// 遞歸寫法 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

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

    關注

    183

    文章

    7644

    瀏覽量

    145581
  • 位運算
    +關注

    關注

    0

    文章

    17

    瀏覽量

    8673

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

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

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

    C語言主要特點

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

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

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

    C語言中除數(shù)為0屬于什么錯誤

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

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

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

    請問如何用C語言列舉當前所有網(wǎng)口?

    何用C語言列舉當前所有網(wǎng)口?
    發(fā)表于 11-25 07:23

    C語言操作

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

    復雜的軟件算法硬件IP核的實現(xiàn)

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

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

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

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

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

    RVB 操作指令集擴展(一)

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

    e203乘法運算結(jié)構及算法原理

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

    e203 ALU乘法運算結(jié)構及算法原理

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

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

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