Переполнение возникает, при такой картине:
0000 0000 - 0000 0000 - 0000 0000 - 1000 0000
Если взять только один младший байт, то он равен -128
Но значение INTEGER = 128
Следовательно будет переполнение, т.к. SHORT делает индентичное преобразование. Т.е. INTEGER должен быть равен по значению BYTE.
Если контроль переполнения выключен, то проблемы нет, и INTEGER просто обрезается до BYTE (128 --> -128)
В противном случае вылетает исключение.
Переполнение возникает на диапазоне от:
0000 0000 - 0000 0000 - 0000 0000 - 1000 0000 = 128 (-128)
до:
0000 0000 - 0000 0000 - 0000 0000 - 1111 1111 = 255 (-1)
Не сложно догадаться, что достаточно вычесть 128 чтобы попасть в диапазон BYTE:
128 - 128 = 0
255 - 128 = 127
Значение смещается, но его можно восстановить прибавлением этих 128 при чтении.