Содержание

Преобразования элементарных типов в Solidity

Неявные преобразования

Если оператор применяется к различным типам, компилятор пытается неявно преобразовать один операнд к типу другого (то же самое верно и для присвоений). В основном, неявное преобразование между типами значений возможно, если оно имеет смысл семантически, и не будет потеряна информация: uint8 преобразуется в uint16, а int128 в int256, но int8 не преобразуется в uint256 (потому что uint256 не может хранить, например, -1). Кроме того, беззнаковые целые могут быть преобразованы bytes такого же или большего размера, но не наоборот. Любой тип, который может быть преобразован в uint160, может быть также преобразован в address.

Явные преобразования

Если компилятор не допускает неявное преобразование, то иногда возможно явное преобразование. Но это может привести к неожиданному поведению, поэтому нужно обязательно проверять, чтобы результат был тем, который нужен. В следующем примере отрицательное int8 преобразуется в uint:

int8 y = -3;
uint x = uint(y);

В конце этого кода, x будет иметь значение 0xfffff..fd (64 шестнадцатеричных символа).

Если тип явно преобразован в меньший тип, то биты более высокого порядка обрезаются:

uint32 a = 0x12345678;
uint16 b = uint16(a); // b будет 0x5678
Материал был полезен? Поделитесь в соц. сетях:
Логотип echain.ru

Добавить комментарий

Ваш e-mail не будет опубликован.