두 개의 이진수 (a
및 b
)가 있다고 가정 해보십시오. 그리고이 숫자가 동시에 같은 비트에서 1을 가질 수 없다고 가정하십시오. 즉, a
에 비트가 1 인 경우 b
은 항상 해당 비트에 0을가집니다. 그리고 다른 방향으로, 어떤 비트에 b
이 1이면, a
은 항상 그 비트에 0을가집니다. 예
a = 00100011
b = 11000100
내용이 a
및 b
가 상기 조건을 만족하는 예 것이다. 이 경우 a | b
은 정확히 a + b
과 같을 것입니다.
a | b = 11100111
a + b = 11100111
의 지금 우리의 조건을 위반하는 두 숫자를 보자
, 즉 두 개의 숫자가 몇 가지 일반적인 비트
a = 00100111
b = 11000100
가 a | b
이 경우 a + b
와 같은 적어도 하나의 일이? 아니요
a | b = 11100111
a + b = 11101011
왜 다른가요? 그들은 우리가 +
두 숫자에 1을 가지고있는 비트를 가지고있을 때 을 수행하고을 수행하면 결과 비트가 0이되고 1은 왼쪽의 다음 비트 인 1 + 1 = 10
으로 옮겨지기 때문에 그들은 다릅니다. 동작 |
은 캐리가없는, 그래서 1 | 1
다시 인 숫자 공통 비트의 적어도 하나의 1이 될 때 단지 1
이 a | b
a + b
와의 차이가 때에 만 발생하는 것을 의미한다. 공통 비트가 1 인 두 개의 숫자를 합하면이 공통 비트가 "두 번"더해져 캐리가 생겨서 a | b
과 a + b
사이의 유사성이 사라집니다.
이제 a & b
을 확인하십시오. a & b
는 무엇을 계산합니까? a & b
은 a
과 b
이 모두 1 인 모든 비트에서 1을 갖는 숫자를 생성합니다.최신의 예에서
a = 00100111
b = 11000100
a & b = 00000100
위에서 보았 듯이,이 정확히 a + b
가 a | b
다를 구성하는 비트입니다. a & b
의 1은 캐리가 발생할 모든 위치를 나타냅니다. 우리가 a - (a & b)
을 수행 할 때 이제
, 우리는 효과적으로 제거 (빼기) 경우 있음을 의미 모든 "잘못된"a
에서 비트와 그러한 비트
a - (a & b) = 00100011
숫자 a - (a & b)
및 b
가 공통 1 비트가 없다, 당신이 그것에 대해 생각한다면, 우리는 우리가 a | b
a - (a & b) + b = 11100111
0,123,516했던 것과 동일한 결과와 끝까지해야한다, 우리는
a - (a & b)
추가
b
우리는 캐리로 실행되지 않으며,
"내가 생각할 수있는 모든 이진수"- 좋은 소식 : 선장. –
오라클은 왜 'BITAND()'를 가지고 있지만 BITOR()는 갖고 있지 않은가? – Thanatos