常被人忽略的一些文法問題

來源:互聯網
上載者:User

學習C++兩個年頭了,在學習的過程中經常碰到一些看似很簡單,但卻經常被人忽略的文法問題。在此我整理一下自己在學習過程中範的一些小錯誤,錯誤雖小,但卻必須重視。

第一個問題:

#include <vector>#include <iostream>using namespace std;void main(){int i = 2, j;j = i++ + ++i;cout << j <<endl;  //等於6i = 2;i = i++ + ++i;//換((i++) + (++i));此種形式,依然等於7cout << i <<endl;  //等於7,為什麼等於7呢?}

自認為大蝦的朋友們,可以試試能看出問題嗎?

根據cyz108D這位哥們的評論,我總結了原因如下:

問題是由於i++引起的,i = i++ + ++i會先執行i = 右邊的運算式,最後再i++操作,所以結果就出現了一個6,一個7。

總結:操作符優先順序問題。

 

第二個問題:

UINT uN = 3;

BOOL bRt = (-1 < uN);

bRt結果為FALSE。原因估計很多朋友,都能說的出來。

無符號版本和有符號版本的區別就是無符號類型能儲存2倍於有符號類型的正整數資料,比如16位系統中一個int能儲存的資料的範圍為-32768~32767,而unsigned能儲存的資料範圍則是0~65535。由於在電腦中,整數是以補碼形式存放的。根據最高位的不同,如果是1,有符號數的話就是負數;如果是無符號數,則都解釋為正數。

總結:切記不要用無符號整型和負數比較。因為程式會將-1轉換成無符號整型後再和無符號整型作比較,-1轉成無符號整型後會變成很大的數 。


第三個問題:

與或優先順序問題,看看各位大蝦有多少和我犯同樣錯誤的?

x = 1, y = 0, z = -1;

q = ++x || ++y && ++z;

q會等於0?還是1?

你認為呢?

 

看分析:

優先順序      操作符  

1 () [] -> .  

  ::     

  ! ~ ++ --  

2 - (unary) * (dereference)  

  & (address of) sizeof  

3 ->* .*    

4 * (multiply) / %  

5 + -  

6 << >>  

7 < <= > >=  

8 == !=  

9 & (bitwise AND)  

10 ^  

11 |  

12 &&  

13 ||  

14 ? :   

15 = += -= etc.  

16 ,  

注意:由於||和&&都是從左向右執行,而&&優先順序大於||,所以實際執行效果是q=(++x)||(++y
&& ++z);

所以q的結果是1。

我原先一直停留在&&和||的優先順序相同,共同存在時都是自左向右執行,結果就成了0.

說了慚愧啊。。

聯繫我們

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