带逻辑运算符的有符号和无符号整数

时间:2019-01-02 18:29:29

标签: c casting operators

int x = /* some integer */; 
unsigned int ux = (unsigned) x;

我们有

x >= 0 || x < ux

我们知道在x < ux中,第一个x被隐式转换为unsigned,但是x(1)中的第一个x >= 0被转换为{{ 1}}隐式?

3 个答案:

答案 0 :(得分:4)

不。逐个操作符发生。

x >= 0 || x < ux

自然是

(x >= 0) || (x < ux)

由于x0都是int,因此不需要任何(usual arithmetic) conversions ...

即使xx < ux中被转换为 unsigned ,表达式x < ux value 仍为{ {1}}-int0(就像左侧一样)。

答案 1 :(得分:1)

不,不是。

这是因为x> = 0是一个表达式。 (通常,0是int类型的八进制常量。)

请尝试1/2 * 1.0,以获得更有害的示例。分组为(1/2)* 1.0,并且为零,因为表达式1/2中的整数不提升为浮点数。

答案 2 :(得分:0)

否,Hour | X1 | X2 | X3 | X4 0 | 11 | 13 | 25 | 37 1 | 21 | 52 | 21 | 45 2 | 18 | 41 | 45 | 25 3 | 65 | 31 | 98 | 14 0,因此您表达的int部分没有晋级。