c++基礎類型之signed、unsigned的一個細節


數值型

    c++中,對於 int、long、int64、...等這些數值類型,如果是有符合的,則類型前加不加 signed 其效果都是一樣的。

比如如下聲明:

int nA;     // 與 signed int nA; 聲明一樣
long nB;   // 與signed long nB; 聲明一樣
int64 nC; // 與signed int64 nC; 聲明一樣

字符

    對於char需要小心。許多人知道 char 與 unsigned char 是不同的,但不一定會知道 char 與 signed char 其實不一定是相同的。為什么?因為編譯器對於 char 其識別為是 char 類型,對於 signed char 是識別為 signed char 類型,而不是 char 類型。

    或許也正是該點原因,所以char變量在不同的編譯器下值可能會不同的根本原因所在(記得在制作xx游戲時,就有遇到過這個坑,N個人查了好久才查出來)。至於編譯器為什么如此設計,個人猜測可能是由於歷史原因,導致后來的c++標准沒辦法統一該點標准。

    下面請看下面測試代碼及測試結果:

 1     cout << (typeid(char) == typeid(signed char)) << endl;
 2 
 3     auto vvvv = typeid(char).name();
 4     cout << vvvv << endl;
 5     vvvv = typeid(signed char).name();
 6     cout << vvvv << endl;
 7     vvvv = typeid(unsigned char).name();
 8     cout << vvvv << endl;
 9 
10     vvvv = typeid(int).name();
11     cout << vvvv << endl;
12     vvvv = typeid(signed int).name();
13     cout << vvvv << endl;

輸出結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM