【发布时间】:2020-12-23 04:17:15
【问题描述】:
为什么存储在int 中的已转换char c 与原始char 不同?
我到处寻找解释,但我似乎无法将 char 存储在 int 中并能够将其与另一个 int 进行比较。
#include <iostream>
using namespace std;
int main() {
char c = 255;
int x = (int)c;
cout << (x == 255) << endl;
return 0;
}
这会输出0。为什么?
【问题讨论】:
-
(c < 0)的结果是什么?或者如果你#include <limits>,你会得到std::numeric_limits<char>::max()什么? -
x == c或x == (char)255将评估为 true,因为默认整数促销。但是x == 255在char签名的机器上转换为-1 == 255。 -
cout << (c < 0) << endl;输出1。这对我来说没有多大意义。 -
我知道
x == c和x == (char)255将相等,但我想知道为什么在将c转换为int并将其与另一个int(如255)进行比较之后将返回 false。 -
因为
11111111 != 11111111111111111111111111111111char是(有符号的),当转换为int时,该值被符号扩展为32位。
标签: c++ types type-conversion