Error
действует как фабрика, на самом деле почти все внутренние конструкторы делают: Array
, Object
, ... все проверяют что-то вроде if (!(this instanceof Array)){ return new Array(arguments);}
Это говорит о том, что в случае ошибки, даже не нужно бросать объект Error
... throw 'Bad things happened';
будет работать, также вы можете даже бросать литерал объекта для отладки:
throw {message:"You've been a naughty boy",
context: this,
args: arguments,
more:'More custom info here'};
Колин предоставляет побитовые операторные функции infix , доступные только для Int
и Long
.
Поэтому необходимо преобразовать байты в int для выполнения побитовых операций:
val b : Byte = 127
val res = (b.toInt() and 0x0f).toByte() // evaluates to 15
UPDATE: Поскольку Kotlin 1.1 эти операции доступны непосредственно на байте.
Из bitwiseOperations.kt :
@SinceKotlin("1.1")
public inline infix fun Byte.and(other: Byte): Byte = (this.toInt() and other.toInt()).toByte()
Побитовое «и» любого байтового значения и 0xff всегда будут возвращать исходное значение.
Это просто, если вы нарисуете биты на диаграмме:
00101010 42
11111111 and 0xff
--------
00101010 gives 42
int
при выполнении побитовых операций (Kotlin просто требует, чтобы это было явным). Поэтому для того, чтобы это расширенное преобразование приводило к ожидаемому положительному значению int, когда начальное значение байта отрицательное, один маскирует 3 байта более высокого порядка расширенного значения int (который включает знаковый бит) через & 0xff
.
– Raman
14 July 2016 в 14:22
x & 0xff
- такой классный способ конвертировать в int. Спасибо, я буду использовать его везде. Это заставило меня выглядеть таким умным!
– Hai Phan
5 May 2018 в 17:33