산술 여산자는 사칙 연산, 비트 연산, 시프트 연산이 포함됩니다.
구분 | 연산자 | 연산 | 피연산자 타입 |
사칙연산과 나머지 | + | 덧셈 | 정수, 실수, 복소수, 문자열 |
| – | 뺄셈 | 정수, 실수, 복소수 |
| * | 곱셈 | 정수, 실수, 복소수 |
| / | 나눗셈 | 정수, 실수, 복소수 |
| % | 나머지 | 정수 |
비트 연산 | & | AND 비트연산 | 정수 |
| | | OR 비트 연산 | 정수 |
| ^ | XOR 비트 연산 | 정수 |
| &^ | 비트 클리어 | 정수 |
시프트 연산 | << | 왼쪽 시프트 | 정수 << 양의 정수 |
| >> | 오른쪽 시프트 | 정수 >> 양의 정수 |
- 모든 연산자의 각 항의 타입은 같아야 합니다.
ex) 정수 타입과 실수 타입은 서로 더하거나 뺄 수 없습니다.
- 타입 변환을 통해서 타입을 같게 캐스팅하여 연산해야 합니다.
- 연산의 결과도 같은 타입입니다.
비트 연산자
AND 연산 ( A & B ) – 모두 1이어야 1이다.
OR 연산 ( A | B ) – 하나만 1이어도 1이다.
XOR 연산 ( A ^ B ) – 같으면 0, 다르면 1이다.
비트 클리어 연산 ( A &^ B ) – 특정 비트를 클리어 하는 연산이다.
10 &^ 2 의 계산 과정
- ^ 연산을 수행한다.
0000 0010 -> 1111 1101
- & 연산을 수행한다.
0000 1010 & 1111 1101 -> 0000 1000
시프트 연산
- >> 연산자는 오른쪽으로 시프트 합니다.
- << 연산자는 왼쪽으로 시프트 합니다.
- 두 연산자 모두 채워질 자리에는 ‘0’으로 채웁니다.
비교 연산자
연산자 | 설명 |
== | 같다 |
!= | 다르다 |
< | 작다 |
> | 크다 |
<= | 작거나 같다 |
>= | 크거나 같다 |
- 비교연산자는 모두 참이면 true, 거짓이면 false를 반환합니다.
- Over flow (오버 플로우), Under flow (언더 플로우)를 주의해야 합니다.
ex) x < x + 1 은 항상 참이 아닐 수 있다. Over flow가 일어나면 x + 1은 x보다 작아집니다.
- float 타입의 실수는 0.1 + 0.2 ‡ 0.3 입니다.
실수를 대, 소 비교할때에는 math 패키지의 Nextafter() 함수를 사용합니다.
논리 연산자
&& | AND | 양변이 모두 true이면 true를 반환한다. |
|| | OR | 양변중 하나라도 true이면 true를 반환한다. |
! | NOT | true이면 false를 반환하고, false이면 true를 반환한다. |
AND 연산 ( A && B ) – 모두 true 일때만 true 이다.
A | B | A && B |
false | false | false |
true | false | false |
false | true | false |
true | true | true |
OR 연산 ( A || B ) – 하나라도 true이면 true 이다.
A | B | A && B |
false | false | false |
true | false | true |
false | true | true |
true | true | true |
NOT 연산 ( !A ) – true 이면 false, false 이면 true이다.
대입 연산자 ‘=’
- 우변 값을 좌변에 복사합니다.
- 좌변은 반드시 변수가 와야 합니다.
- 대입 연산자는 아무런 값을 반환하지 않습니다.
ex) a = b = 10 는 오류가 발생합니다.
복수 대입 연산자 A, B = 3, 4
- 우변의 개수에 맞춰서, 좌변의 변수 개수를 맞춥니다.
- a, b = b, a 는 값이 교환됩니다.
복합 대입 연산자
- 모든 산술 연산자는 복합 대입 연산자로 사용 가능합니다.
ex) +=, -=, *=, /=, %=, &=, |=, ^= <<=, >>=
- 복합 대입 연산자 역시 어떠한 값도 반환하지 않습니다.
ex) b = a += 2 는 오류가 발생합니다.
증감 연산자
- ++ 은 증가합니다.
- –는 감소합니다.
기타 연산자
연산자 | 설명 |
[ ] | 배열의 요소에 접근할 때 사용 |
. | 구조체나 패키지 요소에 접근할 때 사용 |
& | 변수의 메모리 주소를 반환 |
* | 포인터 변수가 가리키는 ㅁ모리 주소에 접근 |
… | 슬라이스 요소들에 접근하거나 가변 인수를 만들 때 사용 |
: | 배열의 일부분을 집어올 때 사용 |
<- | 채널에서 값을 빼거나 넣을 때 사용 |
연산자 우선순위
연산자 우선순위는 알고 있더라도 실수 방지와 가독성을 위해 괄호로 묶는 것을 습관화 해야합니다.
Tucker의 Go 언어 프로그래밍 참조.
책을 보면서 공부한 내용을 정리하면서 작성하는 글입니다. 따라서, 주제 하나를 많은 시간을 들여서 쓰지 않고, 간단하게 작성하는 것부터 시작해서, 계속 다듬어가면서 업데이트해 나갈 생각입니다. 참고하는 자료가 있을 때마다 출처를 적어 놓겠습니다.
[이전글] [Golang] Go 언어 기초 문법 (2) – 변수
[다음글] [Golang] Go 언어 기초 문법 (4) – 함수