<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                【37.1 不同類型變量的賦值疑惑。】 之前講過,多字節變量賦值給單字節變量時,多字節變量的低8位直接覆蓋單字節變量,這個很容易理解,比如: unsigned long a=0x12345678; //多字節變量 unsigned char t=0xab; //單字節變量 t=a; //多字節賦值給單字節變量,t的結果由原來的0xab變成了0x78 那么,問題來了,如果調換過來,單字節賦值給多字節變量,多字節變量除了低8位被單字節變量所直接覆蓋之外,其它剩余的位會是什么狀態?會被0覆蓋嗎?還是會保持原來的數值不變?這個就是本節將要解開的疑惑。比如: unsigned long a=0x12345678; //多字節變量 unsigned char t=0xab; //單字節變量 a=t; //單字節賦值給多字節變量,此時,a到底是0x123456ab?還是0x000000ab?疑惑中...... 想解開此疑惑,只要親自上機測試一下就知道結果。經過在Keil平臺下的C51編譯器測試后,發現結果是這樣子的:a是0x000000ab!也就是說,多字節變量其余高位是默認被0覆蓋的。但是,我還有一個疑惑,是不是所有的C編譯器都是這樣默認處理,會不會在不同的C編譯器平臺下,會有不同的結論?所以,下面我再介紹兩種比較可靠的辦法給大家。 【37.2 我以前用的辦法。】 我以前做項目的時候,每逢遇到這個疑惑,在不同變量賦值之前,我都多插入一行清零的代碼,這行代碼就是先把多字節變量通過直接賦值0來清零,因為我確信常量賦值都是直接覆蓋的(其余高位都直接用0填充)。比如: unsigned long a=0x12345678; //多字節變量 unsigned char t=0xab; //單字節變量 a=0; //賦值之前先清零,這是我以前用的辦法。 a=t; //單字節賦值給多字節變量 現在反省了一下,這種辦法雖然可靠實用,但是顯得過于保守。 【37.3 我現在用的辦法:C語言類型的強制轉換。】 前面章節提到,括號在C語言中有強制的意思,可以強制改變優先級,也可以強制促進不同變量類型的匹配。比如: unsigned long a=0x12345678; //多字節變量 unsigned char t=0xab; //單字節變量 a=(unsigned long)t; //此處的括號就是強制把t先轉變成unsigned long類型,然后再賦值。 這是我現在所使用的辦法,推薦大家用這種。 【37.4 例程練習和分析。】 現在編寫一個程序來驗證剛才講到的主要內容: 程序代碼如下: /\*---C語言學習區域的開始。-----------------------------------------------\*/ void main() //主函數 { unsigned long a=0x12345678; //多字節變量 unsigned long b=0x12345678; unsigned long c=0x12345678; unsigned char t=0xab; //單字節變量 a=t; //a是0x000000ab,其余高位默認被0覆蓋。 b=0; //這是我以前用的辦法,顯得過于保守 b=t; c=(unsigned long)t; //C語言的類型強制轉換。現在推薦大家用這種。 View(a); //把第1個數a發送到電腦端的串口助手軟件上觀察。 View(b); //把第2個數b發送到電腦端的串口助手軟件上觀察。 View(c); //把第3個數c發送到電腦端的串口助手軟件上觀察。 while(1) { } } /\*---C語言學習區域的結束。-----------------------------------------------\*/ 在電腦串口助手軟件上觀察到的程序執行現象如下: 開始... 第1個數 十進制:171 十六進制:AB 二進制:10101011 第2個數 十進制:171 十六進制:AB 二進制:10101011 第3個數 十進制:171 十六進制:AB 二進制:10101011 分析: 通過實驗結果,發現在單片機上的實驗結果和我們的分析是一致的。 【37.5 如何在單片機上練習本章節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>

                              哎呀哎呀视频在线观看