Go gotcha: Numbers that start with zero
What's going on with the counting in this example?
const (
Century = 100
Decade = 010
Year = 001
)
// The world's oldest person, Emma Morano, lived for a century,
// two decades and two years.
fmt.Println("She was", Century+2*Decade+2*Year, "years old.")
She was 118 years old.
Answer
010 is a number in base 8, therefore it means 8, not 10.
Integer literals in Go are specified in octal, decimal or hexadecimal. The number 16 can be written as 020, 16 or 0x10.
| Literal | Base | Note |
|---|---|---|
020 |
8 | Starts with 0 |
16 |
10 | Never starts with 0* |
0x10 |
16 | Starts with 0x |
* 0 is an octal literal in Go.
An integer literal is a sequence of digits representing an integer constant. An optional prefix sets a non-decimal base: 0 for octal, 0x or 0X for hexadecimal. The Go Programming Language Specification: Integer literals
Comments
Be the first to comment!