【发布时间】:2019-01-15 20:48:33
【问题描述】:
为什么signed char和unsigned char这样的两个char值相同的不相等?
char a = 0xfb;
unsigned char b = 0xfb;
bool f;
f = (a == b);
cout << f;
以上代码中f的值为0。
当a 和b 具有相同的值时,为什么会这样?
【问题讨论】:
-
你在编译器中看到过这个警告吗?
warning: overflow in conversion from 'int' to 'char' changes value from '251' to ''\37777777773'' [-Woverflow] char a=0xfb;see here. -
我的代码在没有任何警告的情况下运行并且输出为 0;
-
尝试启用警告。
a的值为-5。b的值为251。它们不相等。 -
@Bathsheba 我认为深入了解语言律师细节对 OP 没有帮助。让我们尝试解释观察到的行为。
-
@RaymondChen:垃圾。在这里选择答案是合适的。我真的不明白你的意思。不要 (i) 对 OP 做出假设,并且 (ii) 不要假设整个页面都针对 OP。你上面的评论是无知的。我可以访问一台机器,其中 char、short、int、long 和 long long 的大小都相同。
标签: c++ unsigned-char