【问题标题】:something weird when compare in c++在 C++ 中比较时有些奇怪
【发布时间】:2022-01-03 00:07:11
【问题描述】:

首先,对不起大家,因为我的英语不好。我有一个简单的代码:

#include <iostream>
using namespace std;
int main(void) {
    char ch = '1';  
    if (ch == (char)1) {
        cout << "Yes";
    }
    else {
        cout << "No";
    }
    system("pause");
}

奇怪的是控制台打印号。为什么不相等?

【问题讨论】:

  • (char) 1 不等于 '1'
  • 字符文字'1'的数值为49。en.cppreference.com/w/cpp/language/ascii
  • @RetiredNinja 它的值可能是49。 ASCII 不是 C++ 中唯一允许的编码
  • 因为它们不是。从技术上讲,这是 C++ 实现的运行时字符集的一个特征,但是没有一个广泛使用的字符集将十进制数字字符编码为等于它们所代表的数字值的代码。这对于 '0' 来说尤其成问题,其数字编码为 0 会使其成为字符串终止符。
  • 另一方面,'1' - '0' 是 1。这就是您将数字字符转换为数字所代表的值的方式。

标签: c++ type-conversion compare converters


【解决方案1】:

ch 包含字符'1' 的字符代码。假设ASCII编码,这个代码的值为49。这个不等于1,所以条件为假。

将值 1 转换为 char 不会将其转换为字符编码。

要使条件为真,需要使用字符常量进行比较。

if (ch == '1') {

【讨论】:

    【解决方案2】:

    那是因为 (char)1 不是“1”而是代表“标题的开始”。因此你的输出变成了否。

    【讨论】:

    • 我认为这条评论可以解释“标题开头”的确切含义。
    【解决方案3】:

    (char) 1 将 1 从十进制转换为 ascii 代码 1 等于 [开始标题] 您可以转换为 49 的 '1' ascii 代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多