четверг, 13 июня 2019 г.

Спецификация Go: преобразования между числовыми типами

Для преобразования непостоянных (non-constant) числовых значений применяются следующие правила:

  1. При преобразовании между целочисленными типами, если значение является целым числом со знаком, оно расширяется до неявной бесконечной точности; в противном случае это ноль продленный (zero extended). Затем он усекается, чтобы соответствовать размеру типа результата. Например, если v := uint16(0x10F0), то uint32(int8 (v)) == 0xFFFFFFF0. Преобразование всегда дает действительное значение; нет признаков переполнения.
  2. При преобразовании числа с плавающей точкой в целое число дробь отбрасывается (усечение до нуля).
  3. При преобразовании целого числа или числа с плавающей точкой в тип с плавающей точкой или комплексного числа в другой сложный тип значение результата округляется с точностью, указанной типом назначения. Например, значение переменной x типа float32 может быть сохранено с использованием дополнительной точности, превышающей точность 32-разрядного числа IEEE-754, но float32(x) представляет результат округления значения x до 32-разрядной точности. Аналогично, x + 0.1 может использовать точность более 32 бит, а float32(x + 0.1) - нет.

Во всех неконстантных преобразованиях, включающих значения с плавающей точкой или комплексные значения, если тип результата не может представлять значение, преобразование завершается успешно, но значение результата зависит от реализации.


Читайте также:


Комментариев нет:

Отправить комментарий