Это основная демонстрация pu sh, позволяющая избавиться от беззнаковых типов, за исключением очень узких доменов (т.е. битовых манипуляций).
В вашей первой функции, где вы проверяете значение непосредственно в ветвь,
(width * y)
Учитывая, что width
беззнаковое (size_t
), результат этого также будет беззнаковым (в вашем случае, довольно большое значение), и, как таковой, всегда будет больше или равно нулю.
Во второй функции вы берете значение без знака и затем возвращаете его в знаковое:
int i = width * y
В результате оно снова становится подписанным, и теперь становится меньше 0.
Попробуйте включить предупреждения компилятора, и вы увидите их много.