簡體   English   中英

char和int在C ++中如何工作

[英]How do char and int work in C++

可能是我要問一個愚蠢的問題,但我想確認char是如何工作的? 讓我舉例說明我想問的問題。 假設我聲明一個char variable ,然后input 6或任何整數字符。

#include <iostream>
using namespace std;
int main(){
    char a;
    cin >> a;
    cout << a*a; // I know here input's ASCII value will multiply
    return 0;
}

與整數input 6相同

#include <iostream>
using namespace std;
int main(){
    int a;
    cin >> a;
    cout << a*a; // Why compiler not take input's ASCII Value here?
    return 0;
}

我想現在我的問題很清楚了。

char是一種基本數據類型,大小為1個字節(不一定是8位!!!),至少可以表示所有字符的ASCII碼范圍 因此,例如, char x = 'a'; 實際上存儲ASCII值'a' ,在這種情況下為97。但是, ostream運算符已重載,因此他們“知道”如何處理char ,而不是在cout << x;等行中盲目顯示97 cout << x; 它們顯示字符的ASCII表示形式,即'a'

但是,無論何時執行a * a ,編譯器都會執行所謂的整數提升 ,並將char的數據隱式轉換為int 因此,對於編譯器,將表達式a * a轉換為(int)a * (int)a ,這是97 * 97的結果,因此最終顯示9409

請注意,對於編譯器, charint是兩種不同的類型。 它可以區分兩者。 因此, operator<<僅在輸入的類型為char或隱式可轉換為char的類型時才顯示char

char的情況下,不是要乘的二進制數,而是所鍵入內容的ASCII值。在6的情況下,ASCII值是54 ,因此輸出2916 a是一個int ,直接存儲6 ,因此輸出36

如果是int,它將讀取您鍵入的數字,而不是ASCII值作為數字值。 因此,您只能將數字用於整數,但是char允許您使用任何字符(例如A,B,C,D | 1,2,3,4 |!#%^),並且使用其ASCII值。 例如,ASCII值4為52,A,*的ASCII值分別為65和42。 注意:大寫字母與小寫字母相比有所不同(例如,S = 83,相反,s = 115)。

希望這可以有所幫助。

這是由於隱式類型轉換:

每當在上下文中使用某種T1類型的表達式但不接受該類型但接受某種其他T2類型的表達式時,都會執行隱式轉換,尤其是:

當表達式用作期望T2的運算符的操作數時

在你的例子中

char a;
cin >> a;
cout << a*a; /

運算符*期望的組成型,所以鍵入char被隱式轉換為int ,因此,雖然轉換字符為int,系統中使用的對應的炭的ASCII值。 請在此處查看更多詳細信息http://en.cppreference.com/w/cpp/language/implicit_cast

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM