Что случилось со счетом в этом примере?
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.
Читайте также:
- Выбрать правильный тип: int против int64
- Преобразования между int, int64 и string в Golang
- Константы в Golang
Комментариев нет:
Отправить комментарий