今天在編程的時候,程式的功能就是讓數碼管顯示比較大的數,當我令這里的temp為10000000時就會正常顯示,但是為1000*10000時就會顯示49什么的,應該是顯示錯誤了,可是明明1000*10000與10000000是一個值啊,我定義的temp資料型別為unsigned long,后來經過嘗試,發現temp為32000+767時就可以顯示,但是32000+768就不可以了,為什么32000+768就會溢位呢?unsigned long的最大范圍不是可以到2的32次冪嗎?








uj5u.com熱心網友回復:
unsigned int aa=1000,b=10000;
unsigned long DaShu=aa;DaShu*=b;
uj5u.com熱心網友回復:
這是資料型別轉換問題。雖然temp的資料型別定義的是unsigned long,但1000和10000都在unsigned int的范圍內,編譯器會把1000 * 10000處理成unsigned int型別的運算,也就出現了溢位現象。如1樓所舉例子,先給temp賦值1000,再進行乘法運算,就可以解決這個問題。
temp = 1000;
temp = temp * 10000;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/105517.html
標籤:單片機/工控
上一篇:verilog檢測32位信號邊沿,當輸入信號每半個clk周期改變一次,我的仿真結果就不對
下一篇:風力擺控制系統
