비트 연산자 : &, |, ^(같0다1), &^(비트 클리어 : 우변bit반전->&)
시프트 연산자 : <<(n비트 왼쪽으로), >>(n비트 오른쪽으로)
실수오차, Nextafter()
package main
import (
"fmt"
"math"
)
func equal(a, b float64) bool {
return math.Nextafter(a,b) == b
}
func main() {
var a float64 = 0.1
var b float64 = 0.2
var c float64 = 0.3
fmt.Printf("%0.18f == %0.18f : %v\n", c, a+b, equal(a+b,c))
} //true - Nextafter()가 실수의 근소한 오차를 처리해준다
a, b = 3, 4
a, b = b, a
b값이 a로, a값이 b로.Go는 C와는 다르게 같은 패키지 내에 있으면 아무곳에서나 정의해도 된다. (C에서는 사용하기 '전'에 정의해야 함)
//함수 정의 기본형태 func 함수명(매개변수1 type, 매개변수2 type) 리턴타입 { return 리턴값 }
- 여러 매개변수의 타입이 동일할 땐 뒤에 한번만 적어도 된다
ex) 덧셈 함수
func Add(a int, b int) int { // Add(a, b int) int
return a + b
}
func main() {
c := Add(3,6) // c := 9
fmt.Println(c)
}
: 정의 시에 리턴타입 여러개를 괄호로 묶는다.
func Divide(a, b int) (int, bool) {
if b==0 {
return 0, false
}
return a / b, false
}
func main() {
c, success := Divide(9,3)
fmt.Println(c, success)
d, success := Divide(9,0)
fmt.Println(d, success)
}
// 3 true
// 0 false
a := 9
a := 3 // X 컴파일에러
a = 3 // O
c, success := Divide(9,3)
d, success := Divide(9,0) //O 오류없음.
//success는 앞서 이미 선언되었지만, d는 처음 선언되기 때문에 := 사용 가능
func Divide(a, b int) (result int, success bool) {
if b==0 {
result = 0
success = false
return
}
result = a / b
success = true
return
}
const 상수명 type = 값
ex)const ConstValue int = 10 //10인건 불변
const (
Red int = iota // 0
Blue int = iota // 1
Green int = iota // 2
)
const (
C1 uint = iota+1 // 1
C2 // 2
C3 // 3
) //비트플래그
: 각 자리에 0또는 1이 있음을 통해 특정한 의미를 가지는 것, iota로 만든다, 변수 사용을 줄여주어 메모리 절약에 도움이 된다
cost (
MasterRoom uint8 = 1 << iota
LivingRoom
BathRoom
SmallRoom
)
func SetLight(rooms, room uint8) uint8 {
return rooms | room // 특정 bit ON
}
func ResetLight(rooms, room uint8) uint8 {
return rooms &^ room // 특정 bit OFF
}
func IsLightOn(rooms, room uint8) bool {
return rooms & room == room // 특정 bit가 1인지 확인
}
func TurnLights(rooms uint8) {
if IsLightOn(rooms, MastserRoom) {
fmt.Println("안방에 불을 켠다")
}
if IsLightOn(rooms, LivingRoom) {
fmt.Println("거실에 불을 켠다")
}
if IsLightOn(rooms, BathRoom) {
fmt.Println("화장실에 불을 켠다")
}
if IsLightOn(rooms, SmallRoom) {
fmt.Println("작은방에 불을 켠다")
}
}
func main() {
var rooms uint8 = 0
rooms = SetLight(rooms, MasterRoom) // 0000 0001
rooms = SetLight(rooms, BathRoom) // 0000 0101
rooms = setLight(rooms, SmallRoom) // 0000 0111
rooms = ResetLight(rooms, SmallRoom) // 0000 0101
TurnLights(rooms)
}
// 안방에 불을 켠다
// 화장실에 불을 켠다