新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 第27節:整除求商的運算

        第27節:整除求商的運算

        作者: 時間:2016-11-22 來源:網絡 收藏
        從業十年,教你單片機入門 第27講:

        C語言中,乘法符號不是“×”而是“*”,除法求商的符號不是“÷”而是“/”。乘除法符號跟我們日常用的數學符號有點不一樣,我個人猜測C語言這樣規定的原因是因為“×”容易跟大寫字母“X”搞混,而“÷”這個符號在電腦鍵盤上不方便直接輸入,故分別用“*”和“/”替代。

        本文引用地址:http://www.104case.com/article/201611/319836.htm

        何謂“整除”?請看以下兩個對比例子:

        10除以4,商等于2.5。------(帶小數點)

        10除以4,商等于2,余數是2。------(這就叫做整除)

        什么時候帶小數點,什么時候是整除?取決于參與運算的變量類型。標準的C語言中,其實遠遠不止我前面所說的unsigned char ,unsigned int ,unsigned long這三種類型,還有一種叫浮點數的float類型,當參與運算的變量涉及float類型時,就可能存在小數點。這是題外話,大家大概知道有這么一回事即可,暫時不用深入研究float等其它類型的數據,因為在單片機項目中,只要用我所述的三種常用類型就絕對夠用了,單片機不用涉及float類型,如果項目涉及小數點的顯示和處理,我們完全可以用那三種類型去處理它,這些處理方法我后續會講到,暫時不用管。而unsigned char ,unsigned int ,unsigned long這三種類型的除法都是整除,我后續所講的所有章節內容也都是整除。

        整除的通用格式:

        “保存變量”=“被除數” / “除數1” / “除數2”... / “除數N”;

        跟之前講的加減運算一樣,左邊的“保存變量”必須是變量,右邊的可以是變量和常量的任意組合。如果右邊只有兩個參與運算的數據,就是整除的常見格式。

        整除的常見格式:

        “保存變量”=“被除數” / “除數” ;

        現在從整除常見格式的6個方面來分析它的規律。

        (1)當“除數”等于0時。我們都知道,數**算除數是不允許等于0的,如果在單片機中非要讓除數為0,商會出現什么結果?我試過,發現有一個規律:如果“除數”是變量的0,那么商等于十進制的255(十六進制是0xff)。如果“除數”是常量的0,那么商等于十進制的1。比如:

        a=23 /y; //假設除數變量y里面是0,那么a的結果是255(十六進制的0xff)。

        b=23 /0; //除數是常量0,那么b的結果是1。

        (2)當被除數小于“除數”時。商等于0。比如:

        c=7 / 10; //c的結果是0。

        (3)當被除數等于“除數”時。商等于1。比如:

        d=10/ 10; //d的結果是1。

        (4)當被除數大于“除數”時。商大于0。

        比如:

        e=10/ 4; //e的結果是2。

        f=10/ 3; //f的結果是3。

        (5)自除運算的簡寫。跟前面加減法一樣,當“被除數”是“保存變量”時,存在自除運算的簡寫。

        “保存變量”=“保存變量” / “除數” ;

        上述自除運算的簡寫如下:

        “保存變量” / =“除數” ;

        比如:

        g/=5; //相當于g=g/5;

        加減法有自加1“++g”和自減1“g--”的特殊寫法,但是除法不存在這種自除1的特殊寫法,因為一個數除以1還是等于它本身,所以自除1沒有任何意義,因此C語言語法中沒有這種寫法。

        (6)除法的溢出規律跟加法的溢出規律是一樣的,所以不再多舉例子。在實際項目中,為了避免一不小心就溢出的問題,我強烈建議,不管加減乘除,凡是參與運算的變量全部都要轉化成unsigned long變量,轉化的方法也跟加減運算的轉換方法一致,不再詳細講解這方面的內容。

        現在編寫一個程序來練習剛才講到的內容,最后把程序編譯后下載到堅鴻51學習板觀察結果。請直接復制第十節模板程序,修改的main程序代碼如下:

        void main() //主程序

        {

        /*---C語言學習區域的開始---------------------------------------------------------------------------*/

        unsigned char a;

        unsigned char b;

        unsigned char c;

        unsigned char d;

        unsigned char e;

        unsigned char f;

        unsigned char g=10; //初始化為10

        unsigned char y=0; //除數變量初始化為0。

        a=23/y;

        b=23/0;

        c=7/10;

        d=10/10;

        e=10/4;

        f=10/3;

        g/=5; //相當于g=g/5;

        GuiWdData0=a; //把a這個變量放到窗口變量0里面顯示

        GuiWdData1=b; //把b這個變量放到窗口變量1里面顯示

        GuiWdData2=c; //把c這個變量放到窗口變量2里面顯示

        GuiWdData3=d; //把d這個變量放到窗口變量3里面顯示

        GuiWdData4=e; //把e這個變量放到窗口變量4里面顯示

        GuiWdData5=f; //把f這個變量放到窗口變量5里面顯示

        GuiWdData6=g; //把g這個變量放到窗口變量5里面顯示

        /*---C語言學習區域的結束---------------------------------------------------------------------------*/

        while(1)

        {

        initial();

        key_service();

        display_service();

        }

        }

        查看運算結果的方法。如何在堅鴻51學習板上觀察變量?按下S1或者S5按鍵即可切換顯示不同的窗口,從而顯示不同的變量。按下S9按鍵不松手就可以切換到十六進制的顯示界面,松開手后會自動切換到十進制的界面。上堅鴻51學習板觀察程序執行的結果如下:

        變量a為255(十六進制是0xff)。

        變量b為1。

        變量c為0。

        變量d為1。

        變量e為2。

        變量f為3。

        變量g為2。

        下節預告:整除求余的運算。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 辽中县| 天气| 日土县| 建宁县| 宣恩县| 调兵山市| 尼勒克县| 江山市| 保亭| 迁西县| 平乡县| 彰武县| 靖江市| 新化县| 永德县| 那坡县| 东乡族自治县| 庆安县| 广平县| 香格里拉县| 聂拉木县| 威海市| 潍坊市| 阿拉尔市| 布拖县| 安宁市| 原阳县| 新闻| 全州县| 五原县| 中江县| 克山县| 南雄市| 固镇县| 陇西县| 左权县| 新巴尔虎左旗| 井研县| 延长县| 兰州市| 库尔勒市|