Значение '0' не равно нулю, это любое целочисленное значение, кодирующее цифру '0' в вашей системе.Обычно 48 (в кодировках, заимствованных из ASCII ), что тогда не равно true
при интерпретации как целое число, равное 1.
Итак, первая из ваших строк кода эквивалентнадо
int x = (48 != 0) ? 1 : 2;
, что явно равно 1
.Вторым является
int x = (48 == 1) ? 1 : 2;
, который столь же ясно оценивается как 2
.