簡體   English   中英

c ++中的字符減法

[英]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字符集)

  1. ...在源和執行基本字符集中,上述十進制數字列表中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的可打印字符圖像,因為xchar類型。

在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.

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