gpt4 book ai didi

c++ - 与 C++ 中的字符不一致的算术?

转载 作者:太空宇宙 更新时间:2023-11-04 02:56:49 27 4
gpt4 key购买 nike

我只是用一个非常简单的 C++ 程序来玩角色,让我解释一下情况 -:

#include<iostream>

int main(){

char c;
std :: cin >> c;
std :: cout << "The integer value of character entered is : " << int(c) << '\n';

int m = 12 + 'á';

std :: cout << m << '\n';

return 0;
}

现在,当我执行上述程序时,我将 c 的值输入为西类牙语字符集中的“á”,并在 Windows 中键入为“Alt + 160”,因为我的计算机将普通的旧字符实现为带符号的char 上面的程序将'á'的整数值输出为-96,但是当我输出m的值时发生了一件奇怪的事情,它返回的输出为-19而不是-84,而如果我执行以下程序-:

#include<iostream>

int main(){

signed char c;
std :: cin >> c;
std :: cout << "The integer value of character entered is : " << int(c) << '\n';

int m = 12 + c;

std :: cout << m << "\n";

return 0;
}

我得到了正确的输出值,现在我很困惑为什么会这样,如果每个字符都由计算机中的某个数字支持那么为什么表达式 m = 12 + 'á' 不被评估为 m = 12 + (-96)。请就这个问题赐教。我正在使用 Windows 7 和 Dev C++

最佳答案

我刚刚说过 160 不是 á 的代码...好吧我错了,它是在代码页 CP437 又名 DOS 中。在 Windows (CP1252) 代码页中,á 是 225,但显然 Windows 并没有在控制台中使用 Windows 代码页。

您的编辑器可能使用也可能不使用 CP437、CP1252、UTF8 或其他任何东西。在十六进制编辑器中查看您的程序以确定。更好的是,不要在程序文本中使用纯 7 位 ASCII 以外的任何内容,尤其是在 Windows 上,但通常在其他任何地方也是如此。即使在运行相同操作系统的相同版本的不同计算机之间,这些东西也不可移植,并且是标准不允许的。他们会过来咬你。如果您的程序中需要非 ASCII 字符串,请从数据文件中读取它们,切勿将它们嵌入源代码中。

当您在程序中处理文本时,请始终确保使用了正确的编码。这并不简单,尤其是在 Windows 下使用 Visual Studio 和标准 C 和/或 C++ I/O 库时。我无法使这种组合与 UTF-8 一起工作。

关于c++ - 与 C++ 中的字符不一致的算术?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16383702/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com