Выражение a ^ b
, вероятно, имеет тип int
, но будет иметь тип unsigned int
в случае, если есть какие-либо значения, которые могут быть представлены как unsigned short
с, но не как int
с.Его значение не будет превышать USHRT_MAX
для общих a
и b
типа unsigned short
и будет ровно 3 для конкретных a
и b
в примере.
(скомментарии:)
Интересно, может ли получиться, что результат [(a^b)
] будет отрицательным числом?в этом случае результат выражения ((a ^ b)> 0) будет ложным
. Оно никогда не будет иметь отрицательного числа, потому что результатом того, что обычные арифметические преобразования приводят к тому, что операнды являютсяпреобразованный в int
или unsigned int
, результирующие значения будут неизменными и, следовательно, неотрицательными.Ни один знаковый бит операнда, если таковой имеется, не будет установлен, поэтому знаковый бит результата, если таковой имеется, также не будет установлен.
Выражение (a ^ b) > 0
имеет тип int
, и оно оценивается как 1 дляданные a
и b
.В более общем случае он дает тот же результат, что и a != b
для a
и b
целочисленного типа.Конечно, может иметь значение 0. С другой стороны, связанное выражение (a ^ b) >= 0
всегда будет иметь значение 1 для a
и b
типа без знака.