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;

我得到空字符(或新行)作为输出。

任何帮助表示赞赏。

原文由 kobe24 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 435
1 个回答

根据 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;

then the operator << tries to output x as a printable character image of the value 2 because x is of type char .

原文由 Vlad from Moscow 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题