sf::window.getSize().y
- это значение без знака. Приведите его к знаковому значению перед отрицанием, например:
-(int)sf::window.getSize().y
Что касается того, почему это происходит, операция отрицания (скорее всего, два дополняют арифметику) перевернет самый верхний бит, делая значение похожим на действительно большое число вместо отрицательного числа.
@ Комментарий NathanOliver ниже верен. Преобразование из значения без знака в значение со знаком в основном теряет один бит, поэтому безопаснее использовать больший тип. На практике, если вы можете гарантировать, что результирующее значение будет достаточно маленьким, чтобы соответствовать типу со знаком, тогда вы можете сделать свой собственный выбор в отношении того, какой тип со знаком использовать.