728x90
(GO의 연산자)
& = AND 연산자
| = OR 연산자
^ = XOR 연산자 (두 값이 서로 다른 경우에 1을 반환, 단독으로 쓸 경우 반전이 됨)
! = NOT 연산자 (1 = true, 0 = false) (^을 단독으로 사용하는 것과 같음)
&^ = AND NOT 연산 수행 ('첫째값이 1이고 두번째 값 0인 경우에만 1을 반환'으로 외울수도 있음)
연산자 우선 순위
- 같은 우선 순위인 경우 앞의 연산자부터 수행
PrecedenceOperator
5 | * / % << >> & &^ |
4 | + - | ^ |
3 | == != < <= > >= |
2 | && |
1 | || |
(참고)
go-ethereum 소스에서의 사용 사례
github: https://github.com/ethereum/go-ethereum
- 소스 위치: common/math/big.go
- 코드
import (
"fmt"
"math/big"
)
...
const (
// number of bits in a big.Word
wordBits = 32 << (uint64(^big.Word(0)) >> 63)
// number of bytes in a big.Word
wordBytes = wordBits / 8
)
...
- 설명
- ^big.Word(0) = 0으로된 bit를 ^로 반전하여 모두 1이 되고
- go package 지원 type ( type Word uint ) => 그냥 uint는 프로그램이 동작하는 시스템과 같으므로 보통 uint64와 같음.
- 괄호 안에서 먼저 오른쪽으로 63번을 이동하면 마지막 1만 남음 (0000 0001)
- 그리고 32(0010 0000)보다 왼쪽으로 1을 이동하하게 됨. 0100 0000 이 되어 64가 됨
- 즉, wordBits = 64, wordBytes = 8 을 입력
- CPU에 32bit/64bit에 맞춰 wordBits를 지정하게 되는 방식
- ^big.Word(0) = 0으로된 bit를 ^로 반전하여 모두 1이 되고
728x90
'IT > Blockchain' 카테고리의 다른 글
Mastering Ethereum - Chapter 1: What is Ethereum? (0) | 2023.07.30 |
---|---|
이중 지불 문제 방지 및 이전의 디지털 통화 (0) | 2023.07.29 |
go-ethereum 코드 분석(1) - PoW Reward (0) | 2023.07.09 |
블록체인 초보자를 위한 단계별 가이드 (번역-1) (0) | 2023.07.09 |
[리먼 브라더스 사태] 2008년 9월 15일, 세계 금융시장을 공포로 몰아넣다 (1) | 2023.06.04 |