Очень грубо говоря - в памяти компьютера данные хранятся в виде двоичных чисел. Грубо говоря, это тот же арифмометр, в котором, например, есть 5 разрядов (00000) и при переходе на шестой (99999 +1) старший разряд теряется, и мы снова получаем 00000. Отрицательных чисел как таковых нет, как и чисел с плавающей точкой. В случае, если работа с такими данными все-таки необходима, используются разные хитрын приемы. Например, старший бит резервируется под отрицательные значения переменной. Аналогичная ситуация для чисел с плавающей точкой. Хитрые манипуляции у разных языков (компиляторов, интерпетаторов) могут быть разными, от чего в некоторых спорных моментах в разных языках могут быть разные значения на выходе.