Предполагая, что ваш код отключен на одну ошибку (текущий код останавливается непосредственно перед оценкой окончательного значения. Тогда вам может ответить следующее.
Очень просто, так как ваш счетчик представляет собой 16-битное целое число без знака, он не может иметь значения больше 0xffff
, так как это значение все еще допустимо, вам нужно иметь какое-то значение, которое выходит за его пределы в качестве защиты. Однако добавление 1
к 0xffff
в 16 битах просто обернется до 0
. Как и предполагалось, либо используйте цикл do while (для которого не требуется защитное значение), либо используйте большее значение для хранения вашего счетчика.
пс. Использование 16-битных переменных на современных машинах фактически менее эффективно, чем использование 32-битных переменных, так как не требуется генерировать код переполнения.