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

Почему 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 десятичных знаков).

Intereting Posts
Ошибка встроенной функции компилятора Kotlin, не совсем уверенная, что происходит AWS S3 неразрешенный супертип: TransferListener в классе верхнего уровня Kotlin Intellij IDEA Kotlin Android Theme.AppCompat Ресурс не найден AndroidAnnotations – ViewById не может использоваться для частного элемента Kotlin: безопасные лямбда (нет утечки памяти)? Замечание типа Observable.combineLatest в kotlin Параметры аннотации Java в Котлине Модуль библиотеки Android, разработанный в Kotlin, экспортируется в приложение Java, вызывающее неудачное разрешение: Lkotlin / jvm / internal / Intrinsics Рециркуляция просмотров share state Предоставляет ли Kotlin дополнительную безопасность? Плагин Jacoco Jenkins с Kotlin Асинхронная работа, но получение нерешенной ссылки для ожидания Невозможно ссылаться на методы сопутствующих объектов как реализовать Switch, используя привязку данных в android Каков канонический способ преобразования массива <Byte> в ByteArray