We are Architect

연산자(8) 본문

Programing/Go

연산자(8)

the best infra 2025. 1. 8. 16:42

 

* 연산자?

  • 연산이라는 뜻은 계산을 표시하는 문자이다.
  • 연산자는 계산과 조작을 할 수 있다.  
  • 최소한의 변수, 연산자, if 조건문만 있으면 코딩을 할 수 있다.

 

* 산술 연산자

  • 연산자는 -, + / ...
  • 피연산자는 데이터 값 예를 들어 3, 4, 0.34, a, b, c ...
구분 연산자 연산 피연산자 타입
사칙 연산과
나머지
+ 덧셈 정수, 실수, 복소수, 문자열
- 뺄셈 정수, 실수, 복소수
* 곱셉 정수, 실수, 복소수
/ 나눗셈 정수, 실수, 복소수
% 나머지 정수
비트 연산 & AND 비트 연산 정수
| OR 비트 연산 정수
^ XOR 비트 연산 정수
&^ 비트 클리어 정수
시프트 연산 << 왼쪽 시프트 정수 << 양의정수
>> 오른쪽 시프 정수 << 음의정수

 

  • AND 연산자
    • 이진수 비트가 둘 다 값이 1이면 1을 표시.
  • OR 연산자
    • 이진수 비트가 둘 중 하나라도 1이면 1을 표시.
  • XOR 연산자
    • 이진수 비트가 둘 중 하나라도 1이면 1을 표시하지만 둘 다 1인 경우는 0으로 표시.
  • 비트 클리어 (AND 연산자 + XOR 연산자)
    • 1번째 연산 : ^(피연산자) > ^연산 수행
    • 2번째 연산 : (피연산자) AND (^연산으로 수행된 피연산자) > 연산 수행

 

* 비트 연산자 예제 

  • >> 은 0으로 빈칸을 채움
    • 그러나 최상위 비트가 1이면 1로 채워진다.(최상위 비트 1은 음수)
  • << 은 0으로 빈칸을 채움
  • 예제 실습 사이트: https://go.dev/play/
 

Go Playground - The Go Programming Language

Press Esc to move out of the editor. // You can edit this code! // Click here and start typing. package main import "fmt" func main() { fmt.Println("Hello, 世界") } About the Playground The Go Playground is a web service that runs on go.dev's servers. Th

go.dev

package main

import "fmt"

func main() {
	var x int8 = 16
	var y int8 = -128
	var z int8 = -1
	var w uint8 = 128

	fmt.Printf("x:%08b x>>2: %08b x>>2 %d\n", x, x>>2, x>>2)
	fmt.Printf("x:%08b x>>2: %08b x>>2 %d\n", uint8(y), uint8(y>>2), y>>2)
	fmt.Printf("x:%08b x>>2: %08b x>>2 %d\n", uint8(z), uint8(z>>2), z>>2)
	fmt.Printf("x:%08b x>>2: %08b x>>2 %d\n", w, w>>2, w>>2)

}

 

  • 결과 값

 

 

* 비교 연산자

연산자 설명 반환값
== 같다 참이면 true
거짓이면 false
!=  다르다
< 작다
> 크다
<= 작거나 같다
>= 크거나 같다

 

 

* 비교 연산자 예제

package main

import "fmt"

func main () {
	var x int8 = 127
    
    fmt.Printf("%d < %d+1: %v\n", x, x, x < x+1)
    fmt.Printf("x\t=  %4d, %08b\n", x, x)
    fmt.Printf("x+1\t=  %4d, %08b\n", x+1, uint8(x+1))

}

 

  • 결과 값

 

 

* 실수 연산자 예제

  • 소수점끼리 더해도 같지 않는 경우가 있다. 
  • 실수는 오차가 발생할 수밖에 없다.
  • 왜냐하면 실수 표현식은 [ 부호 / 지수 / 소수 ] 정확하게 숫자값을 표현하지 못한다. 대신 가장 가까운 수를 표현한다.
  • 그래서 어느 정도 극복 할 수 있는 방법은 있다. 
package main

import (
	"fmt"
	"math"
)

// equal 함수
func equal(a, b float64) bool {
	return math.Nextafter(a, b) == b
}

func main() {
	var a float64 = 0.1
	var b float64 = 0.2
	var c float64 = 0.3

	fmt.Printf("%0.18f == %0.18f : %v\n", c, a+b, equal(a+b, c))
}

 

  • 결과 값 출력
    • math패키지에 Nextafter함수는 앞에 값에서 뒤에 값으로 향해서 가는데 1비트만큼만 가게 한다.
    • 그러면 값은 true가 나온다. (근사값 조정)

 

 

* 논리 연산자

  • 위에는 논리 비트 연산자였고 이번에는 논리 연산자이다. 
  • 비교 연산자와 같이 사용하는 경우가 많다. 
연산자 설명
&& AND 양변이 모두 true이면 true를 반환
||  OR 양변 중 하나라도 true이면 true를 반환한다.
! NOT true이면 false를 반환하고 false이면 true를 반환한다.

 

 

* 대입 연산자

  • 우변에 있는 값이 좌변에 있는 값에 복사를 한다.
a, b = 3, 4

 

 

* 복합 대입 연산자

  • +=, -=, *=, /=, /=, |=, ^=, ... 등 을 의미한다.
  • 예시를 들면 a+=2 이면 a = a + 2와 동일하다. 즉 좌변에 있는 값을 그대로 우변의 앞에 옮기면된다. 
a-=2 >>> a = a - 2
a*=2 >>> a = a * 2

 

 

* 증감 연산자

  • ++, -- 를 의미하며 ++ 일 경우 +1, --일 경우 -1을 의미한다.
  • ++ >> a = a + 1
  • 그러나 값을 반환하지 않는다. 즉 그 결과를 다른 대입 연산자에 넣을수 없다.
    • ex) b = a++ 은 사용불가 

 

* 연산자 우선순위

  • 우선순위가 높을수록 먼저 연산되는 순서가 결정된다.
우선순위 연산자
5 * /  << >> & &^
4 + = | ^
3 == != < <= > >=
2 &&
1 ||

'Programing > Go' 카테고리의 다른 글

상수(10)  (0) 2025.01.10
함수(9)  (0) 2025.01.09
fmt 패키지를 통한 표준 입출력(7)  (0) 2025.01.06
변수 - 3(6)  (0) 2025.01.05
변수 - 2(5)  (0) 2025.01.04