문제

나는 깃발 열거와 비트 연산자에 대해 읽고 있었고이 코드를 발견했습니다.

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.

그러나 독점 또는 "하나 또는 다른 하나는 아니지만"를 의미합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top