[Tucker의 Go 언어 프로그래밍] 06장 연산자

Coen·2023년 9월 26일
1

tucker-go

목록 보기
3/18
post-thumbnail

이 글은 골든래빗 《Tucker의 Go 언어 프로그래밍》의 06장 써머리입니다.

06 연산자

6.1 산술 연산자

산술 연산자

6.1.1 연산의 결과 타입

  • Go는 초 강타입 언어이기 때문에 모든 연산자의 각 항의 타입은 항상 같아야 한다(시프트 연산 제외).
  • 타입 변환을 통해 타입을 맞춰준 이후 연산해야 한다.
  • 결과 또한 인수의 타입과 같다.

6.1.2 비트 연산자

  • &, |, ^, &^는 비트 단위로 연산하는 비트 연산자이다.
  • 비트 연산자는 각 비트 단위로 연산을 수행한다.
  • 비트연산은 정수값을 2진수로 변환한 뒤 계산된다.

6.1.3 시프트 연산자

  • 비트를 왼쪽 또는 오른쪽으로 밀거나 당기는 연산자이다.
  • << 왼쪽 시프트와 >> 오른쪽 시프트 지원

6.2 비교 연산자

  • boolean을 반환

비교 연산자를 사용할 때 주의사항!
1. 정수 오버플로우
2. 정수 언더플로우
3. 실수끼리 비교

6.2.1 정수 오버플로우

  • 정수가 정수 타입의 범위를 벗어난 경우 값이 비정상적으로 변화하는 현상을 말한다.
  • x가 정수일때 x < x + 1 이 false가 될 수 있다.
    - ex) int8은 -128~127까지 표현이 가능한데, x가 127인 경우 x+1는 -128이 된다.

6.2.2 정수 언더플로우

  • ex) int8은 -128~127까지 표현이 가능한데, x가 -128인 경우 x-1는 127이 된다.

6.2.3 float 비교 연산

  • 실수끼리의 == 연산에서 의도치 않은 결과가 나올 수 있다.
  • ex) 0.1 + 0.2 == 0.3 (false)

6.3 실수 오차

  • 컴퓨터는 실수를 완벽하게 표현할 수 없기 때문에(4.7.2) 오차가 발생할 수밖에 없다.

6.3.1 작은 오차 무시하기

  • epsilon이라는 매우 작은 값의 상수를 사용하여 연산시 그보다 작은 차이는 무시하도록 코딩하는 방법이 있다.

6.3.2 오차를 없애는 더 나은 방법

  • Math 패키지에서 제공하는 Nexafter()를 사용한다.

6.4 논리 연산자

  • &&(AND), ||(OR), !(NOT) 연산자를 제공한다.

&& (AND 논리 연산자)

  • 둘 다 true일 때 true

|| (OR 논리 연산자)

  • 둘 중 하나가 true일 때 true

! (NOT 논리 연산자)

  • 피연산자가 하나 오는 단항 연산자
  • !true == false, !false == true

6.5 대입 연산자

  • = 우변값을 좌변에 복사한다.
  • 대입 연산자는 어떤 결과도 반환하지 않는다.

6.5.1 복수 대입 연산자

  • 여러 값을 한 번에 대입할 수 있다.
  • 이때, 우변과 좌변 개수를 맞춰줘야함
  • ex1) a, b = 3, 4
  • ex2) a, b = b, a (a, b 값을 서로 바꿈)

6.5.2 복합 대입 연산자

  • 모든 산술 연산자는 복합 대입 연산자로 사용 가능하다.
  • +=, -=, *= 등 사용 가능!

6.5.3 증감 연산자

  • 변수값을 1 증가시키거나 1 감소시킴
  • a++a += 1과 같고,a--a -= 1과 같다.
  • ++a, --a는 없다!

6.5.4 그 외 연산자


<- 중요!

6.6 연산자 우선순위

  • 높은 우선순위부터 차례대로 계산된다.
profile
백엔드 프로그래머

0개의 댓글