2014-11-10 2 views
1

매우 기본적인 로직 질문인데 죄송하지만 예제에서 일부 코드를 보았습니다. 로직 구조를 이해하지 못하기 때문에 누군가가 나에게 설명 할 수 있기를 바랬다. 내 예에서이 논리가 무엇입니까? [long] = ([long] and [long]) 또는 [Long]

은 단순히 어떤 긴 데이터 형식 개체


에 대한 표현으로 [Long]을 사용하고

의 예는 다음과 같습니다
참고 : WHI, wLow, 롤로, 힐로, LoHI하고, HiHI는 모두 긴 변수입니다. [LONG] = ([LONG] And [LONG]) or [LONG]


내가 재생 시도 : 예를 들면, 나는 또한 반환 논리를 이해하지 못하는 if [long] and [long] thenif [long] or [long] then

을 :

If (wHi And &H8000&) Then 
     MAKELONG = (((wHi And &H7FFF&) * 65536) Or (wLow And &HFFFF&)) Or &H80000000 
    Else 
     MAKELONG = LoLO Or (&H10000 * LoHI) 
     'MAKELONG = ((wHi * 65535) + wLow) 
    End If 

는 여기 테스트되고 어떤 조건 확실하지 않다 즉각적인 창과 그것이 명백한 패턴을 보지 못했기 때문에 나에게 어떤 빛도 비춰주지 않았다.

?1 or 10 
11 
?2 or 10 
10 
?3 or 10 
11 
?4 or 10 
14 
? 1 and 10 
0 
?2 and 10 
2 
?3 and 10 
2 
?4 and 10 
0 
?5 and 10 
0 
+1

그것의 비트 마스크 : http://stackoverflow.com/questions/4046457/how-can-i-do-a-bitwise-and-operation-in-vb-net –

+0

http://en.wikipedia.org/wiki/Boolean_algebra – Steve

+0

'Option Strict On'을 켜면 오류가 발생하는 것을 볼 수 있습니다. Boolean을 예상하는 If 문에서 Long 값을 사용하는 것은 의미가 없습니다. –

답변

1

비트 마스킹입니다. 예 : 테스트 값 :

?1 or 10 -> 11 

     00000001 = binary for 1 
     00001010 = binary for 10 
    OR -------- 
     00001011 = binary for 11 
+0

사실 비트 마스킹과 비트 연산에 대한 위키 백과 문서가 꽤 유익했습니다. http://en.wikipedia.org/wiki/Bitwise_operation – CBRF23