GoLang

21.09.13 [프로그래머스] 기본 자료형

슈팅스타제제 2021. 9. 14. 14:52

✔기본자료형

1. bool: true, false를 저장

2. string: 문자, 문자열을 저장

3. int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64, uintptr: 정수형

int, uint, uintptr은 32비트 시스템에서는 32비트길이, 64에서는 64비트길이!

특별히 정수 크기 및 부호를 지정할 이유가 없으면 int 쓴다. 

4. byte: uint8과 같다. 

5. float32, float64: 실수형

7. complex64, complex128: 복소수형

 

✔형 변환: 변환할 타입(변환할 값)

import (
  "fmt"
  "math/cmplx"
)

var (
  i int 
  f float64
  MaxInt uint64 = 1 << 64 - 1
  z complex128 = cmplx.Sqrt(-5 + 12i)
)
func main(){
  const format = "%T(%v)\n"
  fmt.Printf(format, MaxInt, MaxInt)
  fmt.Printf(format, z, z)

  //float형인 변수 f에 int형인 변수 i를 대입할 수 없다!
  //int에서 float64로 묵시적 타입 변환하지 못하기 때문
  f = i

  //다른 타입을 저장하려면 변환할 타입(변수)와 같이, 형 변환을 해줘야 한다. 
  f = float(i)
}

>>실행결과 

uint64(18446744073709551615)
complex128((2+3i))

 

위 예제에서는 모르는 것이 많았다. 

1. 1<<64 - 1 이 어떤 식을 표현하는지 몰라서 찾아보았다. 

shift 연산자 <<, >>

1<<64 라고 하면, 1의 비트를 왼쪽으로 64번 이동한 것이다. (>>이면 오른쪽으로 이동)

그리고 64비트 부호 없는 정수를 최대화하고 오류를 방지하기 위해 1을 빼는 것이다. 

2. %T(%v)\n 는 어떤 형식으로 바꿔주는지 몰라서 찾아보았다.

형식지정자

형식지정자 의미 입력 출력
%T 타입을 표현 fmt.Printf("%T\n", num1) int
%v 값을 표현 fmt.Printf("%v\n", num1) 1

 

참고문서 링크

문자열 포맷팅: https://mingrammer.com/gobyexample/string-formatting/

 

Go by Example: 문자열 포맷팅

Go는 printf 전통에서 문자열 포맷팅을 훌륭하게 제공합니다. 여기에 일반적인 문자열 포맷팅 예시가 몇 가지 있습니다. type point struct { x, y int } Go는 일반적인 값들을 포맷팅 하기 위해 설계된 몇

mingrammer.com

shift 연산자: https://dejavuqa.tistory.com/328

 

Golang << 와 >> 연산자 (그리고 메모리 사이즈 계산)

Gin의 기능을 확인하다 아래와 같은 코드를 확인확인했습니다. r.MaxMultipartMemory = 8 << 20 메모리 사이즈를 할당하는 설정인데 << 연산자는 알고 있으나 써보는 것은 처음이라 정리하고 갑니다. 우선

dejavuqa.tistory.com

stackoverflow 1 << 64 - 1: https://stackoverflow.com/questions/26833421/how-does-1-64-1-work

 

How does 1 << 64 - 1 work?

At http://tour.golang.org/#14 they show an example where the number 1 is shifted by 64 bits. This of course would result in an overflow, but then it is subtracted by 1 and all is well. How does hal...

stackoverflow.com