[英]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
。
請注意,對於編譯器, char
和int
是兩種不同的類型。 它可以區分兩者。 因此, 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.