3. 숫자 사용하기
페이지 정보
작성자 관리자 댓글 0건 조회 3,428회 작성일 19-03-09 15:27본문
3. 숫자 사용하기
Go 언어는 정수, 실수(부동소수점), 복소수를 지원한다.
1. 정수
변수에 정수를 저장할 때 8진수는 숫자 앞에 0을 붙이고, 16진수는 숫자앞에 0x 또는 0X를 붙인다.
package main
import "fmt"
func main() {
var num1 int = 32
var num2 int = -15
var num3 int = 0723 // 8진수로 저장
var num4 int = 0x32fa2c75 // 16진수로 저장
fmt.Println(num1, num2, num3, num4)
}
2. 실수
실수를 저장할 때는 고정수수점 방식과 부동소수점방식을 사용할 수 있다.
부동소수점의 지수를 표현할때는 e 또는 E를 사용하고 +, - 로 소수점의 위치를 지정한다. 밑수는 10이다.
package main
import "fmt"
func main() {
// 소수점 사용
var num1 float32 = 0.1
var num2 float32 = .35
var num3 float32 = 132.73287
// 지수 표기법
var num4 float32 = 1e7
var num5 float64 = .12345E+2
var num6 float64 = 5.32521e-10
fmt.Println(num1)
fmt.Println(num2)
fmt.Println(num3)
fmt.Println(num4)
fmt.Println(num5)
fmt.Println(num6)
}
3. 복소수
복소수는 실수부+허수부 형태이며 허수부에는 마지막에 i를 붙인다.
실수부와 허수부는 고정소수점 및 부동소수점 형태로 표현한다.
real 함수는 복소수에서 실수부를 가져오고, imag 함수는 허수부를 가져온다.
package main
import "fmt"
func main() {
var num1 complex64 = 1 + 2i // 실수부 1, 허수부 2i
var num2 complex64 = 4.2342 + 2.3527i // 실수부 고정소수점 4.2342,
// 허수부 고정소수점 2.3527i
var num3 complex64 = 1.e+3i // 실수부 부동소수점 1.e, 허수부 3i
var num4 complex64 = 7.27151e-10i // 실수부 없음, 허수부 부동소수점 7.27151e-10i
var num5 complex128 = 1 + 2i // 실수부 1, 허수부 2i
var num6 complex128 = 5.32521e-10 + .12345E+2i // 실수부 부동소수점 5.32521e-10,
// 허수부 부동소수점 .12345E+2i
var r1 float32 = real(num1) // num1의 실수부 1
var i1 float32 = imag(num1) // num1의 허수부 2
var r2 float64 = real(num5) // mum5의 실수부 1
var i2 float64 = imag(num5) // num5의 허수부 2
fmt.Println(num1)
fmt.Println(num2)
fmt.Println(num3)
fmt.Println(num4)
fmt.Println(num5)
fmt.Println(num6)
fmt.Println(r1)
fmt.Println(i1)
fmt.Println(r2)
fmt.Println(i2)
}
복소수는 +로 표현하는 대신 complex 함수를 사용할 수도 있다.
package main
import "fmt"
func main() {
var num1 complex64 = complex(1, 2) // 실수부 1, 허수부 2i
var num2 complex128 = complex(5.32521e-10, .12345E+2) // 실수부 부동소수점 5.32521e-10,
// 허수부 부동소수점 .12345E+2i
fmt.Println(num1)
fmt.Println(num2)
}
4. 바이트
byte에는 보통 16진수, 문자값으로 저장한다.
바이너리 파일에서 데이터를 읽고 쓰거나, 데이터를 암호화, 복호화할 때 주로 사용한다.
package main
import "fmt"
func main() {
var num1 byte = 10 // 10진수 저장
var num2 byte = 0x32 // 16진수 저장
var num3 byte = 'a' // 문자 저장
fmt.Println(num1)
fmt.Println(num2)
fmt.Println(num3)
}
다음과 같이 문자에 큰따옴표를 사용하거나 문자열은 byte에 저장할 수 없으며, 컴파일 에러가 발생한다.
package main
import "fmt"
func main() {
var num1 byte = "a" // 컴파일 에러
var num2 byte = 'ab' // 컴파일 에러
var num3 byte = "ab" // 컴파일 에러
}
5. 룬(rune)
rune은 유니코드(UTF-8)문자 코드를 저장할 때 사용한다.
''(작은 따옴표)로 묶어주어야 하며 문자 그대로 저장하거나 \u 또는 \U를 사용하여 유니코드 문자 코드로 저장할 수도 있다.
여기서 \U는 값을 16진수 8자리로 맞춰주어야 한다.
package main
import "fmt"
func main() {
var r1 rune = '한'
var r2 rune = '\ud55c' // 한
var r3 rune = '\U0000d55c' // 한
fmt.Println(r1, r2, r3)
}
다음과 같이 유니코드 문자에 큰따옴표를 사용하거나 문자열은 rune에 저장할 수 없으며 컴파일 에러가 발생한다.
package main
import "fmt"
func main() {
var r1 rune = "한" // 컴파일 에러
var r2 rune = '한글' // 컴파일 에러
var r3 rune = "한글" // 컴파일 에러
}
6. 숫자 연산하기
숫자연산에는 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%), 시프트(<<,>>), 비트반전(^) 연산자를 사용할 수 있다.
package main
import "fmt"
func main() {
var num1 uint8 = 3
var num2 uint8 = 2
fmt.Println(num1 + num2) // 5
fmt.Println(num1 - num2) // 1
fmt.Println(num1 * num2) // 6
fmt.Println(num1 / num2) // 1
fmt.Println(num1 % num2) // 1
fmt.Println(num1 << num2) // 12
fmt.Println(num1 >> num2) // 0
fmt.Println(^num1) // 252: 비트 반전 연산자
}
숫자끼리 연산을 할때 서로 자료형이 다르면 컴파일 에러가 발생한다.
따라서 명시적으로 자료형을 변환해주어야 한다.
package main
import "fmt"
func main() {
var num1 int = 3
var num2 float32 = 2.2
fmt.Println(num1 + num2) // 정수 + 실수이므로 컴파일 에러
fmt.Println(float32(num1) + num2) // 5.2: 정수를 실수로 변환
fmt.Println(num1 + int(num2)) // 5: 실수를 정수로 변환하여 0.2를 버림
}
자료형을 변환할 때 실수(float32)를 정수(int)로 변환하면 소수점 이하 값을 버리게 되므로 주의해야 한다.
다음과 같이 int32에서 int16으로 변환하는 것처럼 크기가 작은 자료형으로 변환하면 넘치는 값을 버리게 된다.
package main
import "fmt"
func main() {
var num1 uint16 = 10
var num2 uint32 = 80000
fmt.Println(num1 + uint16(num2)) // 14474: uint32에서 uint16으로 변환하면서 넘치는 값을 버림
}
80010이 나와야 하는데 실행해보면 14474가 나온다.
int16에서 저장할 수 있는 가장 큰숫자는 65535인데 int32 변수에 저장된 80000을 int16으로 변환하면서 넘치는 값은 버리기 때문이다.
7. 변수의 크기 구하기
C언어의 sizeof 연산자처럼 변수의 크기를 구하려면 unsafe 패키지의 Sizeof함수를 사용한다. 크기는 바이트 단위이다.
package main
import "fmt"
import "unsafe" // Sizeof 함수를 사용하기 unsafe 패키지 사용
func main() {
var num1 int8 = 1
var num2 int16 = 1
var num3 int32 = 1
var num4 int64 = 1
fmt.Println(unsafe.Sizeof(num1)) // 1
fmt.Println(unsafe.Sizeof(num2)) // 2
fmt.Println(unsafe.Sizeof(num3)) // 4
fmt.Println(unsafe.Sizeof(num4)) // 8
}
댓글목록
등록된 댓글이 없습니다.