목차
- 연산자 정의
- 산수연산자
- 할당연산자
- 비교연산자
- 논리연산자
- 비트연산자
연산자 정의
변수와 값에 대해서 연산 수행.
[예제1] - (값 + 값)
package main
import ("fmt")
func main() {
var a = 3 + 4
fmt.Println(a) // 7
}
[예제2] - (변수 + 값), (변수 + 변수)
package main
import ("fmt")
func main() {
var (
a = 1 + 2 // 3
b = a + 3 // 6
c = b + b // 12
)
fmt.Println(c) // 12
}
산수연산자
일반적 수학 연산 수행.
[종류]
+ - 더하기 (예) x + y
- - 빼기 (예) x - y
* - 곱하기 (예) x * y
/ - 나누기 (예) x / y
% - 나머지 (예) x % y
++ - 1씩증가 (예) x++
-- - 1씩감소 (예) x--
[예제]
package main
import ("fmt")
func main() {
a:= 7
b:= 3
fmt.Println(a+b) // 7
fmt.Println(a-b) // 4
fmt.Println(a*b) // 21
fmt.Println(a/b) // 2
fmt.Println(a%b) // 1
a++
fmt.Println(a) // 8
b--
fmt.Println(b) // 2
}
PS. 정수/정수 나눗셈 경우, 정수형(즉, 몫) 결과값 반환.
할당연산자
변수에 값을 할당하는데 사용.
[종류]
사칙연산 후 할당
= - 그냥 할당 (예) x = 3 (즉, x = 3)
+= - 더하기 후 할당 (예) x += 3 (즉, x = x + 3)
-= - 빼기 후 할당 (예) x -= 3 (즉, x = x - 3)
*= - 곱하기 후 할당 (예) x *= 3 (즉, x = x * 3)
/= - 나누기 후 할당 (예) x /= 3 (즉, x = x / 3)
%= - 나누기 후 나머지 할당 (예) x %= 3 (즉, x = x % 3)
비트연산 후 할당
&= (예) x &= 3 (즉, x = x & 3)
|= (예) x |= 3 (즉, x = x | 3)
^= (예) x ^= 3 (즉, x = x ^ 3)
>>= (예) x >>= 3 (즉, x = x >> 3)
<<= (예) x <<= 3 (즉, x = x << 3)
[예제1] - 사칙연산 후 할당
package main
import ("fmt")
func main() {
var x = 5
fmt.Println(x) // 5
x +=3
fmt.Println(x) // 8
x -=3
fmt.Println(x) // 5
x *= 3
fmt.Println(x) // 15
x /= 3
fmt.Println(x) // 5
x %= 3
fmt.Println(x) // 2
}
[예제2] &= 연산자
각 숫자를 이진수로 변환 후, 각 자리 비교해 둘 다 1이면 1 설정.
package main
import ("fmt")
func main() {
var x = 5
fmt.Printf("x 이진수: [%b]\n", x) // x 이진수: [101]
fmt.Printf("3 이진수: [%3b]\n", 3) // 3 이진수: [ 11]
x &= 3 // 001
fmt.Printf("X 이진수: [%3b]\n", x) // X 이진수: [ 1]
}
[예제3] |= 연산자
각 숫자를 이진수로 변환 후, 각 자리 비교해 하나라도 1이면 1 설정.
package main
import ("fmt")
func main() {
var x = 5
fmt.Printf("x 이진수: [%b]\n", x) // x 이진수: [101]
fmt.Printf("3 이진수: [%3b]\n", 3) // 3 이진수: [ 11]
x |= 3 // 111
fmt.Printf("X 이진수: [%3b]\n", x) // X 이진수: [111]
}
[예제4] ^= 연산자
각 숫자를 이진수로 변환 후, 둘 중 하나만 1이면 1 설정.
package main
import ("fmt")
func main() {
var x = 5
fmt.Printf("x 이진수: [%b]\n", x) // x 이진수: [101]
fmt.Printf("3 이진수: [%3b]\n", 3) // 3 이진수: [ 11]
x ^= 3 // 110
fmt.Printf("X 이진수: [%3b]\n", x) // X 이진수: [110]
}
[예제5] >>= 연산자
숫자를 이진수로 변환 후, 좌측부터 가장 좌측의 bit 복사본 채우며 우측으로 이동하며 맨 우측 비트 떨구기
package main
import ("fmt")
func main() {
var x = 5
fmt.Printf("x 이진수: [%b]\n", x) // [101]
x >>= 3
fmt.Printf("x 이진수: [%3b] \n", x) // [ 0]
}
[예제6] <<= 연산자
숫자를 이진수로 변환 후, 우측부터 0 채우며 좌측으로 이동.
package main
import ("fmt")
func main() {
var x = 5
fmt.Printf("x 이진수: [%b]\n", x) // [101]
x <<= 3
fmt.Printf("x 이진수: [%3b] \n", x) // [101000]
}
비교연산자
두 값을 비교하는데 사용.
- 반환값은 true(1), false(0) 중 하나 반환.
- 조건문에서 주로 사용.
[종류]
== - 같다 (예) x == y
!= - 다르다 (예) x != y
> - 더 크다 (예) x > y
< - 더 작다 (예) x < y
>= - 크거나 같다 (예) x >= y
<= - 작거나 같다 (예) x <= y
[예제]
package main
import ("fmt")
func main() {
var x = 4
var y = 3
fmt.Println(x==y) // false
fmt.Println(x!=y) // true
fmt.Println(x>y) // true
fmt.Println(x<y) // false
fmt.Println(x>=y) // true
fmt.Println(x<=y) // false
}
논리연산자
변수 또는 값 간의 논리를 결정하는 데 사용.
[종류]
&& - 논리 and (즉, 모두 참이면 true 반환)
(예) x < 5 && x < 10
|| - 논리 or (즉, 하나라도 참이면 true 반환)
(예) x < 5 || x < 4
! - 논리 not (즉, 결과의 역 반환)
(예) !(x < 5 && x < 10)
[예제]
package main
import ("fmt")
func main() {
var x = 3
fmt.Println(x < 3 && x < 6) // false
fmt.Println(x < 3 || x < 6) // true
fmt.Println(!(x < 3 || x < 6)) // false
}
비트연산자
이진수 숫자 연산에 사용.
[종류]
& - AND (즉, 둘 다 1이면 1 설정) (예) x & y
| - OR (즉, 둘 중 하나라도 1이면 1 설정) (예) x | y
^ - XOR (즉, 둘 중 하나만 1이면 1 설정) (예) x ^ y
<< - 우측부터 0 채우며 좌측으로 이동 (예) x<<2
>> - 좌측부터 가장 좌측의 bit 복사본 채우며 우측으로 이동하며 맨 우측 비트 떨구기 (예) x>>2
ps. << 및 >> 효과를 정확히 파악하려면, %8b 포맷동사 사용해 출력.
[예제1] - & 연산자
package main
import ("fmt")
func main() {
var x = 5
var y = 3
fmt.Printf("x 이진수: [%3b]\n",x) // x 이진수: [101]
fmt.Printf("y 이진수: [%3b]\n",y) // y 이진수: [ 11]
fmt.Printf("x&y : [%3b]\n",x&y) // x&y : [ 1]
}
[예제2] - | 연산자
package main
import ("fmt")
func main() {
var x = 5
var y = 3
fmt.Printf("x 이진수: [%3b]\n",x) // x 이진수: [101]
fmt.Printf("y 이진수: [%3b]\n",y) // y 이진수: [ 11]
fmt.Printf("x&y : [%3b]\n",x|y) // x&y : [111]
}
[예제3] - ^ 연산자
package main
import ("fmt")
func main() {
var x = 5
var y = 3
fmt.Printf("x 이진수: [%3b]\n",x) // x 이진수: [101]
fmt.Printf("y 이진수: [%3b]\n",y) // y 이진수: [ 11]
fmt.Printf("x&y : [%3b]\n",x^y) // x&y : [110]
}
[예제4] - << 연산자
package main
import ("fmt")
func main() {
var x = 5
fmt.Printf("x = [%3b]\n",x) // x = [101]
fmt.Printf("x<<2 = [%3b]\n",x<<2) // x<<2 = [10100]
}
[예제5] - >> 연산자
package main
import ("fmt")
func main() {
var x = 5
fmt.Printf("x = [%8b]\n",x) // x = [ 101]
fmt.Printf("x>>2 = [%8b]\n",x>>2) // x>>2 = [ 1]
}