Целые числа со знаком и без знака с логическими операторами - PullRequest
0 голосов
/ 02 января 2019
int x = /* some integer */; 
unsigned int ux = (unsigned) x;

у нас есть

x >= 0 || x < ux

мы знаем, что в x < ux первое x приведено неявно к unsigned, но является ли первое x в x >= 0 (1) неявным образом unsigned?

Ответы [ 3 ]

0 голосов
/ 02 января 2019

Нет.Это происходит оператор за оператором.

x >= 0 || x < ux

естественно

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

Поскольку x и 0 оба int с, нет необходимости в (обычная арифметика) преобразования ...

И даже если x преобразуется в без знака в x < ux, значение выражения x < ux имеет тип int - либо 0, либо 1 (как на левой стороне).

0 голосов
/ 02 января 2019

Нет, это не так.

Это потому, что x> = 0 является выражением.(Формально 0 - восьмеричная константа типа int.)

Попробуйте 1/2 * 1.0 для более пагубного примера.Это сгруппировано как (1/2) * 1.0 и равно нулю, поскольку целые числа в выражении 1/2 не переводятся в число с плавающей запятой.

0 голосов
/ 02 января 2019

Нет, 0 - это int, поэтому в части x >= 0 вашего выражения нет продвижения по службе.

...