Go의 비트마스킹 및 비트별 연산 이해
비트마스킹과 비트별 연산은 바이너리 수준에서 데이터를 조작할 수 있는 컴퓨터 프로그래밍의 기본 개념입니다. . 이 예에서는 Go에서 이러한 개념을 살펴봅니다.
<code class="go">package main import ( "fmt" ) const ( isAdmin = 1 << iota isHeadquarters canSeeFinancials canSeeAfrica canSeeAsia canSeeEurope canSeeNorthAmerica canSeeSouthAmerica ) func main() { var roles byte = isAdmin | canSeeFinancials | canSeeEurope fmt.Printf("%b\n", roles) fmt.Printf("Is Admin? %v\n", isAdmin&roles == isAdmin) }</code>
Bitmasking 및 Bitwise OR
상수 isAdmin, isHeadquarters 등은 역할 비트마스크를 나타냅니다. 각 비트는 특정 역할을 나타냅니다. 비트마스킹에는 단일 1비트가 다른 위치로 이동하여 단 하나의 1비트만 포함하는 비트 패턴이 생성됩니다. 비트 OR 연산(|)은 이러한 비트 패턴을 결합하여 OR 연산에 포함된 모든 역할을 활성화하는 마스크를 생성합니다.
위 예에서 역할은 비트 OR 연산자를 사용하여 초기화됩니다.
<code class="go">var roles byte = isAdmin | canSeeFinancials | canSeeEurope</code>
isAdmin, canSeeFinancials 및 canSeeEurope에 해당하는 각 비트를 1로 설정하고 다른 비트는 0으로 유지합니다.
비트별 AND 및 역할 확인
표현식 isAdmin&roles == isAdmin은 역할에 isAdmin 역할이 포함되어 있는지 확인합니다. 비트별 AND(&)는 입력 비트 패턴의 각 비트에 대해 논리적 AND 연산을 수행합니다. 결과 비트 패턴은 두 입력 비트가 모두 1인 경우에만 1비트를 갖습니다.
이 경우 isAdmin&roles는 역할에 isAdmin 역할이 있음을 나타내는 1비트만 있는 비트 패턴을 생성합니다. 이 결과를 isAdmin과 비교하면 역할에 isAdmin이 포함되어 있음을 확인할 수 있습니다.
비트별 동일성과 단일 역할
반대로, Role == isAdmin 표현식은 역할이 isAdmin과 동일한지 확인합니다. . 이는 역할에 isAdmin 역할만 포함되고 다른 역할은 포함되지 않는 경우에만 해당됩니다.
따라서 isAdmin&roles == isAdmin은 역할에 isAdmin 역할이 포함되어 있는지 확인하고, Role == isAdmin은 역할이 isAdmin 역할만 포함되어 있는지 엄격하게 확인합니다. .
위 내용은 Go에서 비트 연산을 사용하여 비트 마스크에 특정 역할이 포함되어 있는지 어떻게 확인합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!