суббота, 23 мая 2020 г.

Числа, начинающиеся с нуля в Golang

Что случилось со счетом в этом примере?

const (
    Century = 100
    Decade  = 010
    Year    = 001
)
// Самая старая женщина в мире, Эмма Морано,
// прожила век, две декады и два года.
fmt.Println("Ей было", Century+2*Decade+2*Year, "лет.")

Ей было 118 лет.

Ответ

010 - это число по основанию 8, поэтому оно означает 8, а не 10.

Целочисленные литералы в Go указываются в восьмеричном, десятичном или шестнадцатеричном формате. Число 16 может быть записано как 020, 16 или 0x10.

Литерал Основание Запись
020 8 Начинается с 0
16 10 Никогда не начинается с 0
0x10 16 Начинается с 0x

Существует множество способов записать ноль по основанию 8 в Go, в том числе 0, 00 и 000. Если вы предпочитаете шестнадцатеричную нотацию, у вас также есть набор параметров: 0x0, 0x00 и 0x000 (а также 0X0, 0X00 и 0X000). Однако в Go нет десятичного целочисленного литерала.

На самом деле, Go также не имеет отрицательных десятичных литералов: -1 - это унарный оператор отрицания, за которым следует десятичный литерал 1.


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


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

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