вот вопрос:
в книге «Компьютерные системы: взгляд программиста», раздел 2.2.5
сказано, что если значение без знака сравнивается со значением со знаком, все значения будут сравниваться в формате без символов. как это
if(-1 < 0u)
{
// will not print this line because -1 will be translated to 255.
printf("all changed to unsigned format");
}
Я попробовал этот код в VC6 SP6, строка НЕ была выведена. И все выглядит хорошо, потому что мы все знаем, что -1 был переведен в 255.
но когда я читаю книгу «Эксперт C, Программирование Deep C Secrets», раздел 1.10
В нем сказано, что, если мой компилятор использует стандарт ANSI C, этот код выведет "-1 <(unsigned char) 1: ANSI": </p>
if(-1 < (unsigned char)1)
{
printf("-1 < (unsigned char)1: ANSI");
}
else
{
printf("-1 NOT Less than (unsigned char)1: K&R");
}
Вывод, который я получил, был: -1 <(без знака) 1: ANSI. </p>
Я использую компилятор VC6 SP6.
и почему это происходит?
по книге «Компьютерные системы: взгляд программиста»
-1 <(unsigned char) 1 приведет к переводу -1 в качестве значения без знака. так оно и будет выглядеть так: </p>
255 <1 </p>
и это не должно выводить строку -1 <(unsigned char) 1: ANSI. </p>
Кто-нибудь может сказать мне, почему это происходит?