<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                【30.1 “與”運算。】 不管是十進制還是十六進制,單片機底層的運算都是以二進制的形式進行的,包括前面章節的加減乘除運算,在單片機的底層處理也是以二進制形式進行。只不過加減乘除我們平時太熟悉了,以十進制的形式口算或者筆算也能得到正確的結果,所以不需要刻意把十進制的數據先轉換成二進制,然后再模擬單片機底層的二進制運算。但是本節的邏輯“與”運算,在分析它的運算過程和規律的時候,必須把所有的數據都轉化成二進制才能進行分析,因為它強調的是二進制的位與位之間的邏輯運算。我們知道,二進制中的每一位只能是0或者1,兩個數的“與”運算就是兩個數被展開成二進制后的位與位之間的邏輯“與”運算。 “與”運算的運算符號是“&”。運算規律是:兩個位進行“與”運算,只有兩個位都同時是1運算結果才能等于1,,否則,只要其中有一位是0,運算結果必是0.比如: 0&0等于0。 0&1等于0。 1&0等于0。 1&1等于1。 注意,上述的0和1都是指二進制的0和1。 現在舉一個完整的例子來分析“與”運算的規律。有兩個unsigned char類型的十進制數分別是12和9,求12&9的結果是多少?分析步驟如下: 第一步:先把參與運算的兩個數以二進制的格式展開。十進制轉二進制的方法請參考前面第14,15,16節的內容。 十進制12的二進制格式是:00001100。 十進制9的二進制格式是: 00001001。 第二步:二進制數右對齊,按上下每一位進行“與”運算。 十進制的12 -> 00001100 十進制的9 -> &00001001 “與”運算結果是 -> 00001000 第三步:把二進制的00001000轉換成十六進制是:0x08。轉換成十進制是8。所以12&9的結果是8。 上述舉的例子只能分析“與”運算的規律,并沒有看出“與”運算的意義所在。“與”運算有啥用途呢?其實用途很多,最常見的用途是可以指定一個變量二進制格式的某位清零,其它位保持不變。比如一個unsigned char類型的變量b,數據長度一共是8位,從右往左: 想讓第0位清零,其它位保持不變,只需跟十六進制的0xfe相“與”:b=b&0xfe。 想讓第1位清零,其它位保持不變,只需跟十六進制的0xfd相“與”:b=b&0xfd。 想讓第2位清零,其它位保持不變,只需跟十六進制的0xfb相“與”:b=b&0xfb。 想讓第3位清零,其它位保持不變,只需跟十六進制的0xf7相“與”:b=b&0xf7。 想讓第4位清零,其它位保持不變,只需跟十六進制的0xef相“與”:b=b&0xef。 想讓第5位清零,其它位保持不變,只需跟十六進制的0xdf相“與”:b=b&0xdf。 想讓第6位清零,其它位保持不變,只需跟十六進制的0xbf相“與”:b=b&0xbf。 想讓第7位清零,其它位保持不變,只需跟十六進制的0x7f相“與”:b=b&0x7f。 根據上述規律,假設b原來等于十進制的85(十六進制是0x55,二進制是01010101),要想把此數據的第0位清零,只需b=b&0xfe。最終b的運算結果是十進制是84(十六進制是0x54,二進制是01010100)。把它們展開成二進制格式的運算過程如下: 十進制的85 -> 01010101 十六進制的0xfe -> &11111110 “與”運算結果是 -> 01010100 【30.2 與運算的“自與簡寫”。】 當被與數是“保存變量”時,存在“自與簡寫”。 “保存變量”=“保存變量” & “某數” ; 上述自與簡寫如下: “保存變量” & =“某數” ; 比如: unsigned char c=9; c&=5; //相當于c=c&5; 最后的計算結果c是1。 【30.3 例程練習和分析。】 現在編寫一個程序來驗證剛才講到的“與”運算: 程序代碼如下: /\*---C語言學習區域的開始。-----------------------------------------------\*/ void main() //主函數 { unsigned char a; unsigned char b=85; //十六進制是0x55,二進制是01010101。 unsigned char c=9; a=12&9; b=b&0xfe; c&=5; //相當于c=c&5; 最后的計算結果c是1。 View(a); //把第1個數a發送到電腦端的串口助手軟件上觀察。 View(b); //把第2個數b發送到電腦端的串口助手軟件上觀察。 View(c); //把第3個數c發送到電腦端的串口助手軟件上觀察。 while(1) { } } /\*---C語言學習區域的結束。-----------------------------------------------\*/ 在電腦串口助手軟件上觀察到的程序執行現象如下: 開始... 第1個數 十進制:8 十六進制:8 二進制:1000 第2個數 十進制:84 十六進制:54 二進制:1010100 第3個數 十進制:1 十六進制:1 二進制:1 分析: 通過實驗結果,發現在單片機上的計算結果和我們的分析是一致的。 【30.4 如何在單片機上練習本章節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>

                              哎呀哎呀视频在线观看