unsigned int與int相加的問題

來源:互聯網
上載者:User

以前還真沒在上面較過真,結果今天就被鄙視了,特地記下來。先看程式:

int main(){int a = -6;unsigned int b = 4;if(a+b > 0)printf("a+b>0\n");//這句話被列印elseprintf("a+b<0\n");int z = a+b;if(z > 0)printf("z>0");elseprintf("z<0");//這句話被列印}

下面解釋一下原因:當int和unsigned in相加時,要將int轉化為unsigned int,而int小於0,所以它的最高位是符號位,為1,所以轉化的結果是一個很大的正數,在第一個if語句中,是兩個“正數”相加,結果自然就大於0了。而在z = a+b這一句時,它把a+b的結果看做一個int類型,而a+b最高位為1,所以z是一個負數,所以列印的是第二個語句。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.