C語言中的整數自動轉換原則

來源:互聯網
上載者:User

有符號數與無符號數之間運算問題
以下實驗均在virual c++6中運行通過
這個問題測試是否懂得C語言中的整數自動轉換原則,有些開發人員懂得極少這些東西。當運算式中存在有符號類型和無符號類型時所有的運算元都自動轉換為無符號類型。因此,從這個意義上講,無符號數的運算優先順序要高於有符號數,這一點對於應當頻繁用到無符號資料類型的嵌入式系統來說是豐常重要的。
首先進行一個實驗,分別定義一個signed int型資料和unsigned int型資料,然後進行大小比較:
    unsigned int a=20;
    signed int b=-130;
a>b?還是b>a?實驗證明b>a,也就是說-130>20,為什麼會出現這樣的結果呢?
這是因為在C語言操作中,如果遇到無符號數與有符號數之間的操作,編譯器會自動轉化為無符號數來進行處理,因此a=20,b=4294967166,這樣比較下去當然b>a了。
再舉一個例子:
 unsigned int a=20;
 signed int b=-130;
 std::cout<<a+b<<std::endl;
結果輸出為4294967186,同樣的道理,在運算之前,a=20,b被轉化為4294967166,所以a+b=4294967186

減法和乘法的運算結果類似。

如果作為signed int型資料的b=-130,b與立即數之間操作時不影響b的類型,運算結果仍然為signed int型:
signed int b=-130;
std::cout<<b+30<<std::endl;
輸出為-100。

而對於浮點數來說,浮點數(float,double)實際上都是有符號數,unsigned 和signed首碼不能加在float和double之上,當然就不存在有符號數根無符號數之間轉化的問題了。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.