Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- terraform
- AI챗봇
- git hub
- 프로세스 관리
- jenkins
- maven
- open ai
- python
- 사용자 계정 관리
- docker
- GIT
- 클라우드
- AI
- AWS
- Linux
- 명령어
- it기사
- 파이썬
- 리눅스
- dockerfile
- nexus
- Azure
- go
- 표준 라이브러리
- 변수
- 함수
- aws사용자모임
- 3티어 아키텍처
- 애저
- awskrug
Archives
- Today
- Total
We are Architect
연산자(8) 본문
* 연산자?
- 연산이라는 뜻은 계산을 표시하는 문자이다.
- 연산자는 계산과 조작을 할 수 있다.
- 최소한의 변수, 연산자, 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/
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 |