Может кто-нибудь объяснить мне, какC неявное преобразование?
printf("%d", -2<2u?1:-1);
распечатывает '-1'. Я предполагаю, что происходит какое-то неявное преобразование, но я не могу понять его.
Может кто-нибудь объяснить мне, какC неявное преобразование?
printf("%d", -2<2u?1:-1);
распечатывает '-1'. Я предполагаю, что происходит какое-то неявное преобразование, но я не могу понять его.
-2
преобразуется в unsigned integer
. Это будет равно UINT_MAX - 1
, что определенно превышает 2
. Следовательно, условие терпит неудачу и печатается -1
.
Так что 'u' преобразует как -2, так и 2 в' unsigned integer'? – Nebeski
@Nebeski Нет, преобразование -2 в 'unsigned int' является неявным преобразованием, как указано в заголовке. Вы не можете напрямую сравнивать подписанное и неподписанное количество, поэтому одно преобразуется в другое. – unwind
@Nebeski Изучите «целые акции» и «обычные арифметические преобразования». – Lundin
Включить все предупреждения: * «предупреждение C4308: отрицательная интегральная константа, преобразованная в неподписанный тип» * объясняет проблему. –
Теперь объясните, почему этот код 'if ((-2 <2u? 1u: -1)> 0) {printf (" - 1> 0 "); } 'prints' -1> 0' :) – Lundin
@ Lundin Вы имеете в виду что-то вроде [This] (http://pastebin.com/raw/Ss7pW8hb)? – Michi