【问题标题】:Extended ASCII character C++扩展 ASCII 字符 C++
【发布时间】:2013-04-27 00:42:21
【问题描述】:

为什么我不能测试我在这段代码中分配给符号 (250) 的 ASCII 值?测试 -6 似乎很奇怪,因为这不是我分配给符号的值。

#include <iostream>

using namespace std;

int main()
{

    char symbol = 250; // dot symbol

    int a = symbol;

    cout << symbol << endl; // Outputs dot symbol

    cout << a << endl; // Outputs -6

    if(symbol == 250)
        cout << "250 works";

    if(symbol == -6)
        cout << "-6 works"; // -6 test works

    return 0;
}

【问题讨论】:

  • 你不只是使用symbol == '.'有什么原因吗?
  • 250 恰好是我正在使用的,并且在我的较大代码段中还有一些来自扩展 ASCII 的其他字符。

标签: c++ ascii extended-ascii


【解决方案1】:

char 已在您的平台上签名。 250 超出了带符号字符的范围。你想要:

if (symbol == static_cast<char>(250))

否则symbol 将被提升为整数。或者,使用unsigned char 而不是char,它可能会签名也可能不会签名。

【讨论】:

  • 谢谢。我其实不知道有符号和无符号数据类型的区别,但至少我知道范围是有区别的。
  • 对于相同宽度的无符号数据类型,符号使用一位。所以一字节无符号可以从 0 到 255,而一字节有符号可以从 -128 到 127。在 C++ 中,普通的旧 char 可以是有符号的或无符号的。如果它对您的代码很重要,您最好指定您期望的那个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-19
  • 1970-01-01
  • 2020-08-23
  • 1970-01-01
  • 2022-01-14
  • 2010-11-22
相关资源
最近更新 更多