BitWise | 운영자는?
-
03-07-2019 - |
문제
나는 깃발 열거와 비트 연산자에 대해 읽고 있었고이 코드를 발견했습니다.
enum file{
read = 1,
write = 2,
readandwrite = read | write
}
나는 포용 적이나 진술이 왜 있고 어떻게 될 수 없는지에 대해 어딘가에 읽었지만 기사를 찾을 수없는 방법에 대해 읽었습니다. 누군가 내 기억을 상쾌하게하고 추론을 설명 할 수 있습니까?
또한 어떻게 말하고/또는? 예를 들어. dropdown1 = "hello"및/또는 dropdown2 = "hello"인 경우 ....
감사
해결책
첫 번째 질문 :
ㅏ |
약간 또는; 첫 번째 값 또는 두 번째 값으로 설정되면 결과에서 비트가 설정됩니다. (당신은 그것을 사용합니다 enums
다른 값의 조합 인 값을 생성하려면) 조금 사용하려면 그리 큰 의미가 없습니다.
다음과 같이 사용됩니다.
[Flags]
enum FileAccess{
None = 0, // 00000000 Nothing is set
Read = 1, // 00000001 The read bit (bit 0) is set
Write = 2, // 00000010 The write bit (bit 1) is set
Execute = 4, // 00000100 The exec bit (bit 2) is set
// ...
ReadWrite = Read | Write // 00000011 Both read and write (bits 0 and 1) are set
// badValue = Read & Write // 00000000 Nothing is set, doesn't make sense
ReadExecute = Read | Execute // 00000101 Both read and exec (bits 0 and 2) are set
}
// Note that the non-combined values are powers of two, \
// meaning each sets only a single bit
// ...
// Test to see if access includes Read privileges:
if((access & FileAccess.Read) == FileAccess.Read)
본질적으로 특정 비트가 enum
설정되어 있습니다. 이 경우 우리는 비트가 Read
설정되었습니다. 가치 Read
그리고 ReadWrite
둘 다이 테스트를 통과 할 것입니다 (둘 다 비트 0 세트가 있습니다). Write
그렇지 않을 것입니다 (비트 0 세트가 없습니다).
// if access is FileAccess.Read
access & FileAccess.Read == FileAccess.Read
// 00000001 & 00000001 => 00000001
// if access is FileAccess.ReadWrite
access & FileAccess.Read == FileAccess.Read
// 00000011 & 00000001 => 00000001
// uf access is FileAccess.Write
access & FileAccess.Read != FileAccess.Read
// 00000010 & 00000001 => 00000000
두 번째 질문 :
나는 당신이 "및/또는"라고 말할 때 "하나, 다른 하나 또는 둘 다"를 의미한다고 생각합니다. 이것이 바로 무엇입니다 ||
(또는 운영자). "하나 또는 다른 하나이지만 둘 다 아닙니다"라고 말하면 ^
(독점 또는 오페라).
진실 테이블 (true == 1, false == 0) :
A B | A || B
------|-------
OR 0 0 | 0
0 1 | 1
1 0 | 1
1 1 | 1 (result is true if any are true)
A B | A ^ B
------|-------
XOR 0 0 | 0
0 1 | 1
1 0 | 1
1 1 | 0 (if both are true, result is false)
다른 팁
위의 또는 약간 또는 논리적이거나. 1 | 2는 3에 해당합니다 (1 & 2 = 0).
보다 http://en.wikipedia.org/wiki/bitwise_operation Bitwise 작업에 대한 더 나은 설명을 위해.
열거 유형. 열거 유형을 비트 플래그 섹션으로 보면 예제 A 또는 A의 예제를 제공합니다. b가 아닙니다.
글쎄, 여기에는 두 가지 다른 질문이 있지만, 논리적이거나 대부분의 프로그래밍 언어에서 찾은 것처럼 #2에 대답하는 것은 당신이 의미하는 바입니다.
if (dropdown == "1" || dropdown == "2") // Works if either condition is true.
그러나 독점 또는 "하나 또는 다른 하나는 아니지만"를 의미합니다.