[英]Char Subtraction in c++
我對C ++很新,我在理解c ++中的字符減法方面遇到了一些麻煩。
我有這個代碼
char x='2';
x-='0';
if(x) cout << "More than Zero" << endl;
這返回超過零作為輸出,以便知道xi的值嘗試此代碼。
char x='2';
x-='0';
if(x) cout << x << endl;
我得到null字符(或新行)作為輸出。
任何幫助表示贊賞。
根據C ++標准(2.3字符集)
- ...在源和執行基本字符集中,上述十進制數字列表中0之后的每個字符的值應大於前一個值的值。
因此,任何字符集中相鄰數字的代碼相差1。
因此在此代碼段中
char x='2';
x-='0';
if(x) cout << x << endl;
'2'
和'0'
之間的差異(表示這些字符的代碼之間的差異;例如,在ASCII中,這些代碼是0x32和0x30,而在EBCDIC中它們分別是0xF2和0xF0)等於2
。
您可以通過以下方式檢查此項
if(x) cout << ( int )x << endl;
要么
if(x) cout << static_cast<int>( x ) << endl;
如果你只是寫
if(x) cout << x << endl;
然后運算符<<嘗試輸出x
作為值2
的可打印字符圖像,因為x
是char
類型。
在C / C ++中,字符存儲為具有ASCII編碼的8位整數。 所以當你做x-='0';
你從'2'的ASCII值減去'0'的ASCII值是48,即50,然后它等於2,這是一個特殊的控制字符,表示STX(文本的開頭),這是不可打印的。
如果要對字符執行算術運算,最好在任何操作之前從每個字符中減去“0”,並在結果中添加“0”。 為了避免像在8位值范圍內運行這樣的問題,我建議將它們放在整數或長整數上。
char x = '2';
int tempVal = x - '0';
/*
Some operations are performed here
*/
x = tempValue % 10 + '0';
// % 10 - in case it excedes the range reserved for numbers in ASCII
cout << x << endl;
在較大值類型上執行這些操作要安全得多,並且減去“0”字符允許您執行獨立於ASCII編碼的操作,就像使用偶然整數一樣。 然后添加'0'返回ASCII編碼,這將打印一個數字。
你將48(ascii char'0')減去字符50(ascii'2')
50 - 48 = 2
if (x) ' true
在C ++中,字符都由ASCII代碼表示(請參閱http://www.asciitable.com/ )我想這樣做:
'2' - '0'
就像在做
50 - 48 = 2
根據ASCII表,ASCII碼2代表文本的開頭, cout不顯示。
希望能幫助到你。
那么你的代碼正在做的是以下內容:
x ='2',表示在ASCII表中作為十進制值的50。
那你基本上是在說:
x = x - '0',其中ASCII表中的零表示為十進制的48,等於x = 50 - 48 = 2。
請注意2!='2'。 如果在ASCII表中查找2(十進制),它將為您提供STX(文本開頭)。 這就是您的代碼正在做的事情。 所以請記住,減法是在char的十進制值上進行的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.