package main

import "fmt"

func main() {
	a := 0b1010 // desimal 10
	b := 0b110  // desimal 6

	fmt.Printf("a      = %04b (%d)\n", a, a)
	fmt.Printf("b      = %04b (%d)\n", b, b)
	fmt.Printf("a & b  = %04b (%d)\n", a&b, a&b)
	fmt.Printf("a | b  = %04b (%d)\n", a|b, a|b)
	fmt.Printf("a ^ b  = %04b (%d)\n", a^b, a^b)
	fmt.Printf("a &^ b = %04b (%d)\n", a&^b, a&^b)

	// ^ sebagai operator unary: membalik semua bit (NOT)
	var c uint8 = 0b0000_1010
	fmt.Printf("^c     = %08b (%d)\n", ^c, ^c)

	// Pergeseran bit ke kiri dan ke kanan
	fmt.Printf("1 << 3  = %d\n", 1<<3)
	fmt.Printf("16 >> 2 = %d\n", 16>>2)

	// Jumlah pergeseran tidak dibatasi lebar tipe
	var kecil uint8 = 1
	var geser uint = 9
	fmt.Println("kecil << geser =", kecil<<geser)
}
