Это фигня. Вы получаете 8 как мусор, и вычитаете, чтобы получить 7.
Вот что такое неопределенное поведение. То, что вы продолжаете получать 8, не означает, что оно четко определено. Попробуйте делать более сложные вещи в своем коде. Добавьте переменные выше и ниже вашего char
.
О своем «тесте» вы говорите:
Однако, непоследовательность трудно игнорировать, учитывая, что мусор должен быть случайным.
Вы должны проверить свои предположения. «мусор должен быть случайным» говорит кто? Согласно тому, что мусор должен быть случайным? Единственный способ, которым мусор будет случайным, - это если система периодически просматривает память и присваивает ей случайные числа.
Когда мы говорим «случайно», мы имеем в виду, что не знаем, что это будет. Это не делает его недетерминированным. Это компьютеры. Если вы скажете им делать одно и то же снова и снова, он будет делать то же самое снова и снова .
Ваш компилятор и настройки продолжают генерировать один и тот же код, который в итоге дает вам эти значения мусора. Детерминированный, но вы не можете полагаться на это поведение: «случайный».
Кроме того, 1-800 не означало, что вы приняли это так, как вы. «8» не обязательно означает «мусор», так как в том, как все настроено, ваш компилятор заполняет их 8. То, что он имеет в виду, означает, что 8 так же мусор, как и любое другое число.