【发布时间】:2014-01-28 10:07:43
【问题描述】:
看起来很奇怪。我发现了误会。我将 gcc 与 char 一起用作签名字符。我一直认为在比较表达式(和其他表达式)中,如有必要,有符号值会转换为无符号值。
int a = -4;
unsigned int b = a;
std::cout << (b == a) << std::endl; // writes 1, Ok
但问题是
char a = -4;
unsigned char b = a;
std::cout << (b == a) << std::endl; // writes 0
如果不只是按位,比较运算符有什么魔力?
【问题讨论】:
-
第一个输出1,你确定吗? Gcc disagrees.
-
第一个和第二个都不输出
1。 -
是的,第一个输出1,第二个输出0。都是默认促销的结果。
-
@R..,再次,no, they don't.
-
这两种情况你不是说
unsigned xxx b = a;吗?它可以解释混乱。
标签: c++ c unsigned-char