<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                【19.1 什么是加法運算的溢出?】 前面章節介紹的三種數據類型unsigned char ,unsigned int ,unsigned long,它們的數值都是有最大范圍的,分別是255,65535,4294967295。如果運算結果超過了變量本身的最大范圍,會出現什么結果、有什么規律,這就是本節要講的溢出。 (1)什么是溢出?先看一個例子如下: unsigned char a; a=0x8536; 分析: 因為a是unsigned char變量,位數是8位,也就是一個字節,而0x8536是16位,兩個字節,這種情況下,把兩字節的0x8536強行賦值給單字節變量a,變量a只能接收到最低8位的一個字節0x36,而高8位的一個字節0x85就被丟失了,這個就是本節所說的溢出。 (2)再看一個例子如下: unsigned char b=0xff; b=b+1; 分析: b默認值是0xff,再加1后,變成了0x0100保存在一個隱藏的中間變量,然后再把這個中間變量賦值給單字節變量b,b只能接收到低8位的一個字節0x00,所以運算后b的數值由于溢出變成了0x00。 (3)再看一個例子如下: unsigned char c=0xff; c=c+2; 分析: c默認值是0xff,再加2后,變成了0x0101保存在一個隱藏中間變量,然后再把這個中間變量賦值給單字節變量c,c只能接收到低8位的一個字節0x01,所以運算后c的數值由于溢出變成了0x01。 (4)再看一個例子如下: unsigned int d=0xfffe; d=d+5; 分析: d默認值是0xfffe,再加5后,變成了0x10003保存在一個隱藏中間變量,由于這個隱藏的中間變量是 unsigned int類型,只能保存兩個字節的數據,所以在中間變量這個環節就溢出了,實際上隱藏的中間變量只保存了0x0003,然后再把這個中間變量賦值給16位的兩字節變量d,d理所當然就是0x0003。 (5)再看一個例子如下: unsigned long e=0xfffffffe; e=e+5; 分析: e默認值是0xfffffffe,再加5后,變成了0x100000003保存在一個隱藏中間變量,由于這個隱藏的中間變量是unsigned long類型,只能保存四個字節的數據,所以在中間變量這個環節就溢出了,實際上隱藏的中間變量只保存了0x00000003,然后再把這個中間變量賦值給32位的四字節變量e,e理所當然也是0x00000003。 【19.2 例程練習和分析。】 現在我們編寫一個程序來驗證上面講到的例子: 程序代碼如下: /\*---C語言學習區域的開始。-----------------------------------------------\*/ void main() //主函數 { unsigned char a; //一個字節 unsigned char b=0xff; //一個字節 unsigned char c=0xff; //一個字節 unsigned int d=0xfffe; //兩個字節 unsigned long e=0xfffffffe; //四個字節 a=0x8536; b=b+1; c=c+2; d=d+5; e=e+5; View(a); //把第1個數a發送到電腦端的串口助手軟件上觀察。 View(b); //把第2個數b發送到電腦端的串口助手軟件上觀察。 View(c); //把第3個數c發送到電腦端的串口助手軟件上觀察。 View(d); //把第4個數d發送到電腦端的串口助手軟件上觀察。 View(e); //把第5個數e發送到電腦端的串口助手軟件上觀察。 while(1) { } } /\*---C語言學習區域的結束。-----------------------------------------------\*/ 在電腦串口助手軟件上觀察到的程序執行現象如下: 開始... 第1個數 十進制:54 十六進制:36 二進制:110110 第2個數 十進制:0 十六進制:0 二進制:0 第3個數 十進制:1 十六進制:1 二進制:1 第4個數 十進制:3 十六進制:3 二進制:11 第5個數 十進制:3 十六進制:3 二進制:11 分析: 通過實驗結果,發現在單片機上的計算結果和我們的分析是一致的。 【19.3 如何在單片機上練習本章節C語言程序?】 直接復制前面章節中第十一節的模板程序,練習代碼時只需要更改“C語言學習區域”的代碼就可以了,其它部分的代碼不要動。編譯后,把程序下載進帶串口的51學習板,通過電腦端的串口助手軟件就可以觀察到不同的變量數值,詳細方法請看第十一節內容。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看