<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國際加速解決方案。 廣告
                【24.1 為什么要借用**unsigned long類型的中間變量?**】 為什么要借用unsigned long類型的中間變量進行算術運算?其實就是為了減少溢出的問題。溢出是因為數據超過了它的最大范圍,unsigned char ,unsigned int ,unsigned long三種數據類型中,unsigned long的取值是最大的。當參與運算變量中存在非unsigned long類型的時候,在運算前,先讓每個非unsigned long類型的變量借用一個unsigned long類型的中間變量,然后才開始運算,可以大大減少運算中的溢出問題。 unsigned long的取值是從0到4294967295,萬一數據超過了4294967295怎么辦?有兩種辦法,一種是換更加高級的32位單片機,比如STM32單片機就支持64位長度的“long long”數據類型,64位長度的數據類型基本上可以滿足絕大多數涉及運算的項目,還有一種方法思路是可以用BCD碼的數組方式進行運算,這種數組運算的方法我以后會跟大家介紹,初學者現在暫時不用深入了解它。 【24.2 如何借用unsigned long類型的中間變量?】 借用中間變量的方法是引入中間變量,有多少個非unsigned long類型變量就引入多少個unsigned long中間變量,再借這個“殼”進行運算,最后再把中間變量的計算結果返回給實際變量。請看下面例子。 轉換之前: unsigned int a; unsigned char x=195; unsigned long y=101; a=x-y; //進行算術減法運算 分析: 上述公式用到3個變量,其中a和x都不是unsigned long變量,因此需要為它們分別引入兩個unsigned long類型的中間變量t和s,于是乎,繼續往下看...... 轉換之后: unsigned int a; unsigned char x=195; unsigned long y=101; unsigned long t; //引入的中間變量t,用來給a借用。 unsigned long s; //引入的中間變量s,用來給x借用。 //第一步:使用之前先清零 t=0; //t在用之前,先把t的32位全部清零。 s=0; //s在用之前,先把s的32位全部清零。 s=x; //s接收x原數據,等效于x借用unsigned long中間變量s這個殼。 t=s-y; //此處unsigned long類型的t就默認代表了unsigned int類型的變量a。 //第二步:因為其它的變量都是臨時的,所以運算結束后再返回計算結果給原來的變量。 a=t; //運算結束后再把計算結果返回給原來的變量a。 分析: 第一步:unsigned long類型的中間變量在轉換之前為什么要先賦值0進行清零,比如上述代碼的“s=0;”?因為它是32位的數據類型,它也是一個隨機數,如果不清零,后續的其它類型的變量可能是16位或者8位的類型變量,這些寬度不一的變量在給32位的變量賦值的時候,只能覆蓋到32位變量的低16位或者低8位,無法等效于實際借用者變量的數值,所以有可能會出錯。 第二步:因為其它的變量都是臨時的,所以運算結束后應該再返回計算結果給原來的實際變量。在這里要多說一句,實際項目中,最后接收運算結果的變量應該根據項目所需去選擇它的類型,建議盡量選擇unsigned long類型吧,否則,如果中間變量的計算結果大于接收變量本身的類型范圍,也會發生溢出。比如,上述最后一行代碼a=t,如果此時t的數值大于65535,a也會發生溢出的現象。 但是如果a本身是unsigned long 類型,就不會發生這種現象。 加法,乘法,除法在借用中間變量的時候,跟本節減法例子中的思路也大同小異。 【24.3 建議在算術運算中確保所有的變量都是unsigned long類型。】 不管是以前講的加法,現在講的減法,還是未來講的乘法和除法,我都會建議“在加減乘除四則運算中,凡是非unsigned long類型的變量,都應該借用unsigned long類型的中間變量進行運算,最后再返回計算結果給實際的變量。”unsigned long變量是三種數據類型中取值范圍最大的數,借用此類型的中間變量,可以減少在簡單運算中可能出現的溢出問題。
                  <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>

                              哎呀哎呀视频在线观看