Преобразование больших чисел в байт в Котлине

Почему double 65555 преобразованный в byte дает результат 19 в Котлине?

Это из-за численного преобразования от более широкого типа к типу меньшего размера. Double ( номер двойной точности IEEE 754 ) имеет свою неотъемлемую часть, учитываемую степенями двух
65555 = 2 17 + 2 4 + 2 2 + 2 0 = 65536 + 16 + 2 + 1, который хранится в двоичной форме (верхние разряды ниже):

  ‭... 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1‬ 

Когда это число преобразуется в Byte , сохраняются только его младшие 8 бит:

  ... _ ‭_ _ _ _ _ _ _ _ _ 0 0 0 1 0 0 1 1‬ 

И это приводит к 2 4 + 2 2 + 2 0 = 16 + 2 + 1 = 19.

Потому что при преобразовании 65555 (или 65555.0) в двоичное представление требуется более одного байта. Поэтому вызов .toByte() принимает самый низкий, который равен 19.

 65555 -> Binary == 1 00000000 00010011 ^ ^^^^^^^^ ^^^^^^^^ 1 0 19 

Double 65555.0 преобразуется в целое число 65555, которое равно 0x10013. Преобразование в байт принимает младший байт, который равен 0x13 (19 десятичных знаков).