Go: Bitwise operators cheat sheet

The binary number 00010000 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.

Built-in operators

Operation Result Description
0011 & 0101 0001 Bitwise AND
0011 | 0101 0111 Bitwise OR
0011 ^ 0101 0110 Bitwise XOR
^0101 1010 Short for 1111 ^ 0101 (NOT)
0011 &^ 0101 0010 Bitclear (AND NOT)
00110101<<2 11010100 Left shift
00110101<<100 00000000 No upper limit on shift count
00110101>>2 00001101 Right shift
  • The binary numbers in the examples are for explanation only. Integer literals in Go must be specified in octal, decimal or hexadecimal.

  • The bitwise operators take both signed and unsigned integers as input. The right-hand side of a shift operator, however, must be an unsigned integer.

  • Shift operators implement arithmetic shifts if the left operand is a signed integer and logical shifts if it is an unsigned integer.

Package math/bits

Operation Result Description
bits.OnesCount8(00101110) 4 Number of one bits (population count)
bits.Len8(00101110) 6 Bits required to represent number
bits.Len8(00000000) 0
bits.LeadingZeros8(00101110) 2 Number of leading zero bits
bits.LeadingZeros8(00000000) 8
bits.TrailingZeros8(00101110) 1 Number of trailing zero bits
bits.TrailingZeros8(00000000) 8
bits.RotateLeft8(00101110, 3) 01110001 The value rotated left by 3 bits
bits.RotateLeft8(00101110, -3) 11000101 The value rotated right by 3 bits
bits.Reverse8(00101110) 01110100 Bits in reversed order
bits.ReverseBytes16(0x00ff) 0xff00 Bytes in reversed order
  • These functions operate on unsigned integers.

  • They come in different forms that take arguments of different sizes. For example, Len, Len8, Len16, Len32, and Len64 apply to the types uint, uint8, uint16, uint32, and uint64, respectively.

  • The functions are recognized by the compiler and on most architectures they are treated as intrinsics for additional performance.