In
const (
a = 1 << iota // a == 1 (iota == 0)
b = 1 << iota // b == 2 (iota == 1)
c = 3 // c == 3 (iota == 2, unused)
d = 1 << iota // d == 8 (iota == 3)
)
what does << signify.
It’s a “bit shift.” Computers store numbers in binary so:
- 0001 in binary is 1 in decimal
- 0010 in binary is 2 in decimal
- 0100 in binary is 4 in decimal
- 1000 in binary is 8 in decimal
The expression 1 << 1
means “take a binary 1 and shift it to the left one column” which doubles it to 2. 1 << 2
means to shift it over 2 columns so it becomes 4, just like the list above.
iota
is a counter in Go. If I wanted to use English names for numbers instead of writing them out, I could do this:
const (
Zero = iota
One = iota
Two = iota
)
Then I could say One + Two
in my program to get 3. This would be a little silly to do for real because it’s easier to read and write 1 + 2
, but it demonstrates what iota
does.
You can combine bit shifting (i.e. <<
) and iota
like in the sample you posted so that instead of counting by 1, each row doubles to 1, 2, 4, 8, 16, etc.
EDIT: typos
Thank you. I understand now.
This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.