Да, это важно.
На платформе с 32-битной int
, например,
int x = -1;
unsigned y = 0xffffffff;
выражение x == y
даст 1
, потому что через «обычные арифметические преобразования» значение x
преобразуется в unsigned
и, таким образом, в 0xffffffff
.
Выражение (unsigned int)x == y
также равно 1
. Единственное отличие состоит в том, что вы выполняете преобразование явно с использованием приведения.
Выражение x == (int)y
, скорее всего, также будет 1
, потому что преобразование 0xffffffff
в int
дает -1
на большинстве платформ (два отрицательных дополнения). Строго говоря, это поведение, определяемое реализацией, и поэтому оно может различаться на разных платформах.
Обратите внимание, что ни в одном из случаев вы не получите "ожидаемый" результат 0
. Хорошая реализация дана в ответе Mark Byers .