2017-12-12 7 views
0

나는 어떤 코드를 이해하려고했다?비트 연산 n & (n-1)은 무엇을합니까?</p> <pre><code>n=n&(n-1); </code></pre> <p>이 무엇입니까 : 나는 문을 찾을 것을 특징으로

+5

'x & (x - 1)'의 결과가 0이면'x'는 * 2의 거듭 제곱 *입니다. [이 페이지]의 # 9 (http://www.exploringbinary.com/ten-ways-to-check-if-an-integer-is-a-power-of-two-in-c/)를 참조하십시오. – meowgoesthedog

+0

누군가 내가 그런 쓰레기를 배울 수있는 곳을 알고 있다면, 공유 해주세요. 고맙습니다. –

+0

https://graphics.stanford.edu/~seander/bithacks.html – pm100

답변

8

이 방정식은 n에서 최하위 0이 아닌 비트를 제로로 만듭니다.

8 비트로 가정하면 여기 엔 봉투 설명이 있습니다. 하자 n 결과가 0이면, 결과로서 70

n  = 01000110 
n-1  = 01000101 
      -------- 
n&(n-1) = 01000100 

일, 그것은 원래 n에 설정된 하나의 비트는 2의 거듭 제곱이었다 의미 있었다 수단 (또는 그것으로되는 0이었다).

n이 0이 될 때까지 반복적으로 적용하면 반복 횟수는 원래 n에 설정된 비트 수를 계산합니다. 그러나 대부분의 프로세서에는이 작업을 수행하는 기본 제공 작업이 있습니다.


비트 해킹이 일반적으로 관심이있는 경우이 사이트에서 "bithacks"를 검색하면 많은 조회가 생성됩니다.

+1

'n'이 '서명되지 않은'유형이라고 가정합니다. 또한 0이 2의 거듭 제곱임을 나타냅니다. – Peter

+0

@Peter : 2의 보수 및 부호 크기로 작동하는 것 같습니다. 0을 지적 해 주셔서 감사합니다. – jxh

관련 문제