GO의 비트 타이어 운영자
저수준 프로그래밍에서는 비트 수준에서 작업하는 것이 일반적입니다. 이것은 컴퓨팅 초기 시절에 사실이며 오늘날까지도 관련이 있습니다. 대부분의 인기있는 언어는 유산뿐만 아니라 무기고에서 자주 사용되는 기능으로서 비트 레벨 작업을위한 조항을 유지합니다. 직접 비트 레벨 작업은 암호화, 시스템 수준 프로그래밍, 이미지 처리 등에 사용됩니다.이 Golang 프로그래밍 자습서에서는 Bitwise Operator의 세부 사항과 GO에서 작업하는 방법으로 이동합니다.
Golang Bitwise 운영자
Go는 다음과 같은 비트 연산자를 제공합니다.
&
: 비트AND
|
: 비트OR
^
: 비트XOR
&^
: 비트 명확합니다(AND NOT)
: Left shift
>>
: 올바른 교대
GO의 비트 타이어 운영자는 비트를 다룹니다 – 0
그리고 1
비트 패턴이 같은 길이의 정수 변수에서만 작동합니다. 형식 문자열 %b
비트 표현에 사용됩니다. 다음은 사용자 입력을 가져 와서 이진 번호로 포맷하는 방법을 보여주는 빠른 코드 예입니다.
package main
import "fmt"
func main() {
var i int
fmt.Printf("Enter number:")
fmt.Scanf("%d", &i)
fmt.Printf("Number %d in binary is %b", i, i)
}
ID (Integrated Development Environment) 에서이 코드를 실행하면 다음과 같은 출력이 제공됩니다.
Enter number:34
Number 34 in binary is 100010
여기서는 숫자를 정수 변수로 입력했습니다. fmt.Scanf
형식 문자열을 사용하십시오 %d
이진 형태를 인쇄합니다.
GO에서 비트 레벨 작업 사용
다음은 개발자가 GO에서 비트 레벨 작업을 사용할 수있는 일부 사용 사례입니다.
- Bitwise 운영자는 비트 필드에서 작동하기 때문에 특히 무언가를 제시하는 데 효율적입니다.
yes
그리고no
또는true
또는false
속성. 예를 들어, 프로그래머가 파일에 허가를 받거나 취소하려고한다고 가정합니다 (읽기, 쓰기, 실행). 이 경우 허가를 위해 정보의 바이트를 저장하는 대신 3 비트 만 사용할 수 있습니다.101 = (read, execute only)
또는100 (read-only)
. 이것은 많은 공간을 절약합니다. - 비트 작동에 크게 의존하는 패리티 및 체크섬이 포함 된 포트/소켓을 통한 네트워크 전송 또는 통신에서
- 모든 암호화 및 압축 알고리즘은 약간 수준에서 작동하며 비트 타이어 작업자를 많이 사용합니다.
- 이미지 또는 그래픽 프로그래밍에서 작업하면 비트 레벨 작업이 많은 도움이됩니다.
XOR
그래픽 및 이미지 처리에 많은 흥미로운 용도가있는 연산자 - 논리 게이트 만들기, 회로 개발, 장치 드라이버, 유한 상태 기계 및 수학 생성은 모두 비트 운영자에게 수많은 용도를 가지고 있습니다.
Go의 & (및) 운영자
그만큼 &
GO의 운영자가 수행됩니다 AND
피연산자로 제공되는 두 정수 번호 간의 작업. 비트 AND
작업에는 다음과 같은 특성이 있습니다.
결과는 다음과 같습니다 one
오직 둘 다 x
그리고 y
가치가있다; 그렇지 않으면 a zero
값. 그만큼 AND
작업을 사용하여 지우거나 0
– 숫자의 특정 비트 위치. 이 아이디어는 수많은 창의적인 방식으로 사용될 수 있습니다. 예를 들어, 프로그래머가 숫자를 찾고자하는 경우 ODD
또는 EVEN
그들은 사용할 수 있습니다 &
다음과 같은 방식으로 운영자 :
x := 125
if (x & 0x1) > 0 {
fmt.Println("ODD")
} else {
fmt.Println("EVEN")
}
이 트릭은 모든 것이 작동합니다 ODD
번호가 있습니다 one
가장 유의미한 비트 (LSB) 및 AND
작업은 LSB를 제외한 모든 비트를 지우겠습니다. 따라서, 결과 if-condition
될 것입니다 accurate
값이라면 ANDed
~와 함께 0x1
보다 큽니다 0
숫자가 의미합니다 ODD
그리고 false
그렇지 않으면.
| (또는) 이동 중 운영자
그만큼 |
GO의 운영자가 수행됩니다 OR
피연산자로 제공되는 두 정수 번호 간의 작업. 비트 OR
작업에는 다음과 같은 특성이 있습니다.
적어도 하나의 입력이있는 경우 결과는 1입니다. 1
그리고 0
그렇지 않으면. 이 속성은 AND
특정 비트를 청소하는 데 사용할 수 있습니다. 우리가 소수점의 LSB를 넣고 싶다고 가정 해 10
(이진에서 1010
). LSB를 설정 한 후 결과가 있어야합니다 11
(이진에서 1011
). 이 작업을 수행하는 코드는 다음과 같습니다.
var set_bit uint32 = 0x1
var value uint32 = 0xA
fmt.Printf("%b", value|set_bit)
따라서 & (및) 작업을 사용하여 비트를 제거 할 수있는 경우 | (또는) 비트를 설정하는 데 사용될 수 있습니다.
^ (xor) 운영자가 이동합니다
그만큼 ^
GO의 운영자가 수행됩니다 OR
피연산자로 제공되는 두 정수 번호 간의 작업. 비트 OR
작업에는 다음과 같은 특성이 있습니다.
이 경우 출력은 다음과 같습니다 1
오직 두 입력 값이 다를 때. 두 입력 값이 모두 동일하면 0
언제 XORed
. 그만큼 XOR
운영자는 컴퓨팅에 많은 흥미로운 용도를 가지고 있습니다. 주로 값 변경과 같은 값을 전환하는 데 사용됩니다. 0
에게 1
그리고 1
에게 0
일련의 비트로. 일반적인 속임수 XOR
세 번째/다른 변수를 사용하지 않고 두 변수의 값을 바꾸고 있습니다. 다음은 GO 에서이 아이디어를 실행하는 방법을 보여주는 코드 예입니다.
x := 5
y := 6
fmt.Printf("nBefore swap: x=%d,y=%d", x, y)
x = x ^ y
y = x ^ y
x = x ^ y
fmt.Printf("nAfter swap x=%d,y=%d", x, y)
위의 Golang 코드 교환 (또는 스왑). x
에게 y
그리고 y
에게 x
사용 XOR
연산자.
Go의 &^ (그리고) 연산자
그만큼 &^ (AND NOT)
실제 운영자가 ^,
그리고 &^
그것을 분리하는 데 사용됩니다 XOR
연산자. 그 이유는 C/C ++와 달리 전용 단제가 있기 때문입니다. NOT
느낌표로 표시되는 연산자 (!
), GO에는 약간의 것이 없습니다 NOT
연산자 (와 혼동하지 마십시오 !
논리가 아닌 연산자). 따라서 무엇이든 무효화하기 위해 프로그래머는 동일하게 사용할 수 있습니다 ^ (XOR)
연산자는 약간 역할을합니다 NOT
. 비트 NOT
숫자를 보완합니다. 그래서, 비트 x
그리고 ^x
서로 보완 할 것입니다. 다음은 사용 방법을 보여주는 간단한 코드 예제입니다. &^ (AND NOT)
GO의 운영자 :
var x uint8 = 129
fmt.Printf("n x=%b,^x=%b", x, ^x)
GO의> 운영자
그만큼 (left-shift) and
>>
(오른쪽 시프트) GO의 운영자는 삽입하여 비트 위치 수를 왼쪽으로 이동합니다. 0
삽입하여 LSB와 오른쪽으로 0
MSB에 각각. 예를 들어, 주어진 정수 x
왼쪽으로 이동할 수 있습니다 n
비트 또는 바로 바로 이동했습니다 n
다음과 같이 비트 :
x > n, shift x to the right by n bits
프로그래밍에서 흥미로운 용도 중에 프로그래머가 숫자를 바꾸면 1
비트, 값의 결과를 곱한 결과를 제공합니다. 2
. 마찬가지로, 우리가 오른쪽으로 숫자로 이동하면 1
비트, 우리는 값의 몫을 분할합니다. 2
. 다음은 아이디어를 보여주는 빠른 코드 예입니다.
var x uint8 = 10
fmt.Printf("n%d x 2 = %d", x, x>1)
Go의 Bitwise 운영자에 대한 최종 생각
개발자는 비슷한 작업을 수행하므로 비트와 논리 연산자를 구별 할 때 종종 혼란을 겪습니다. 명확히하기 위해 비트 타이어 운영자 항상 숫자 비트 값을 반환하십시오 논리 연산자 부울 값 만 생산합니다 (true
또는 false
), 숫자가 아닌 것입니다. 이 차이는 그들의 행동을 이해하는 데 중요합니다. Bitwise 작업은 복잡한 논리를 최적화하여 긴 조건을보다 효율적인 표현으로 변환하는 데 특히 유용 할 수 있습니다. GO에서 BitTise Operator와의 작업은 강력하고 보람이 될 수있는 저수준의 성능 지향적 접근 방식을 제공합니다.
Post Comment