2014-10-16 1 views
1

비트 수준 (|, ~, ^, &) 및 논리 (& &, || ,!) 연산 만 사용하는 x == y와 동일한 C 표현식은 무엇입니까? x와 y가 같으면 1을 반환하고 그렇지 않으면 0을 반환해야합니다.비트 수준 및 논리 연산을 사용하여 x == y와 동일하게 작성 하시겠습니까?

+1

귀하의 [부분] 대답/솔루션은 ..입니까? 모든 다른 경우에 대해 TTL을 그립니다. 정수의 경우'=='는 * 모든 * 비트가 동일하다는 것을 의미한다는 것을 잊지 마십시오; 이제는 비트가 하나 인 * 비트가 동일한지를 감지하여 모든 비트에 적용하는 방법에 대해 기본 케이스 (비트 단위로)를 처리하십시오. – user2864740

답변

3

표현 x==ylogical biconditional 표현 x<->y과 같습니다 (x와 y가 같으면 true로 평가 됨). biconditional 정도로

x==y

NOT (X에서 XOR의 Y)

되는 상당의 exclusive or (X 및 Y는 동일하지 경우이 TRUE)의 역수

비트 : ~(x^y) 논리적

XOR, 그래서 포기하지 않는다 N X ⊕ Y = (X의 ∨ y를) ∧ (X ∧ y)의 논리

! !((x || y) && !(x && y))

참고 :는 위의 표현은 논리적으로이 (더 나은 단어가 algebraicly 될 수있다?) 상당. 비트 비교는 물론 각 비트를 살펴볼 것입니다. @chux가 지적했듯이, 2 개의 숫자가 산술적으로 동일하지만 비트 패턴이 다른 경우 예기치 않은 결과가 발생할 수 있습니다. == 연산자를 재정의 한 개체를 비교하는 경우 동일한 문제가 C++에서 발생합니다. 논리적 버전의 경우, xy이 동일한 변수 유형이 아닌 경우 유형 강제 변환이 발생할 수 있습니다.

+2

yoo ...... fyi 첫 번째 (idk 몇 분) 이내에 응답을 표시 할 수 없습니다. 나는 어쨌든 그것을 지금했다. @ kpa6uk – user3166989

+2

"'x == y'는'NOT (x XOR y)'와 동등하지만 부호없는 정수에서는 작동하지만'int' (또는 FP)에서는 일반적으로 사용되지 않습니다. 이러한 유형은 동일한 산술 값을 갖는 서로 다른 비트 패턴을 가질 수 있으며이 솔루션은 비트 패턴 비교를 수행합니다. +1이 어쨌든 OP의 필요성에 충분하다고 확신합니다. – chux