Прежде всего, как я надеюсь, вы понимаете, код, который вы разместили, полон ошибок, и вы не захотите зависеть от его вывода. Если вы пытаетесь выполнить какую-либо из этих манипуляций в реальной программе, вам нужно сделать это каким-то другим, более четким, более переносимым способом.
Итак, я предполагаю, что вы спрашиваете только из любопытства, и я отвечаю в том же духе.
Введите char
на вашем компьютере, вероятно, 8-разрядное количество со знаком. Таким образом, его диапазон составляет от -128 до +127. Так что +128 не подходит.
Когда вы пытаетесь вставить значение +128 в 8-разрядное число со знаком, вы, вероятно, получите вместо этого значение -128. И это похоже на то, что происходит с вами, основываясь на том факте, что ваше заявление if
, очевидно, успешно выполняется.
Итак, мы попытаемся взять значение -128 и напечатать его, как если бы это был unsigned int
, который на вашем компьютере, очевидно, является 32-битным типом. Он может содержать числа в диапазоне от 0 до 4294967295, что, очевидно, не включает -128. Но целые числа без знака, как правило, ведут себя довольно хорошо по модулю их диапазона, поэтому, если мы добавим 4294967296 к -128, мы получим 4294967168, который является именно тем числом, которое вы видели.
Теперь, когда мы поработали над этим, давайте в будущем решим не защемлять числа, которые не вписываются в переменные char
, или печатать подписанные величины с помощью спецификатора формата %u
.