연산자는 정말 별 게 없다.
Go 언어의 연산자는 다음과 같다.
산술 연산자
'+': 덧셈
'-': 뺄셈
'*': 곱셈
'/': 나눗셈
'%': 나머지
비교 연산자
'==': 같음
'!=': 다름
'<': 작음
'>': 큼
'<=': 작거나 같음
'>=': 크거나 같음
연산자에 대해 배우다 보면 꼭 이런 얘기가 한 번은 나온다.
실수 오차를 조심하라고.
컴퓨터에서 실수 연산을 하면 부정확할 때가 있는데 왜 그런 걸까?
근본적으로는 컴퓨터가 실수를 이진수로 표현할 때 일부 실수가 정확하게 표현되지 않기 때문이다.
실수는 무한히 표현될 수 있다(e.g. 0.333...).
이진수 자릿수는 한계가 있다(컴퓨터는 유한한 메모리를 사용한다).
그럼 무슨 일이 발생하게요?
유한한 이진수 자릿수로 인해 실수를 정확히 표현할 수 없는 경우가 발생한다.
실수 0.1을 이진수로 표현하려 할 때, 이는 이진수에서 무한 반복되는 소수(0.0001100110011...)가 되어 정확히 표현할 수 없게 된다.
그래도 표현을 해야 하기에(계산을 해야 하기에) 컴퓨터는 이 값을 근사하여 저장하게 되는데
이 근사값이 사용된 연산에서 작은 오차가 발생하는 것이다.
0.1과 0.2를 계산하면 이론상으로는 0.3이다.
그런데 컴퓨터에서는 0.30000000000000004이라는 결과가 나온다.
0.3과 0.30000000000000004는 다른가?
YES, 다르다.
이런 부분을 생각지 않고 연산하고 비교하고(==, != 등) 이러면 사고나기 딱 좋다.
설명이 너무 길었다.
다시 논리 연산자로 넘어가자.
논리 연산자
'&&': 논리곱(AND)
'||': 논리합(OR)
'!': 부정(NOT)
대입 연산자
'=': 기본 대입
'+=', '-=', '*=', '/=', '%=': 복합 대입 연산자
마지막으로
연산자 우선순위를 알아보자.
연산자 우선순위
연산자 우선순위는 어떤 연산자가 먼저 계산될지를 결정합니다.
곱셈과 나눗셈은 덧셈과 뺄셈보다 높은 우선순위를 가집니다.
괄호 ()를 사용하여 연산의 순서를 명시적으로 지정할 수 있습니다.
논리 연산자 중 !는 &&와 ||보다 높은 우선순위를 가집니다.
Tucker의 Go 언어 프로그래밍 - 연산자편 끝!
이제 7장 함수로 넘어갑니다!