[英]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.