2014-02-09 2 views
3

코드를 분석하고 알고리즘의 각 부분을 이해하려고했습니다. 이 나는 ​​비트와 운영자가 내가 이해에서 & Bitwise 연산자 사용에 대한 이해

if (qpd >= 0) qpd += qpd&1; 
else qpd -= qpd&1; 

이 알고리즘이 변수 QPD에 대한 마스크로 1을 사용하고 싶어

사용이 부분을 통해 들어 왔지만 숫자는 단지 하나이기 때문에, 많은이 아니다 사실상 아무런 변화도 일으키지 않는 작업을 할 때 감각이 있어야합니다. 내가 잃어버린 이래로 여기 계신 분이 계세요. 다음

비트 AND 연산자를 사용하여 배열의 크기 및 주파수를 얻는다 FOOR 루프는이다

/* this is the analysis step */ 
      for (k = 0; k <= fftFrameSize2; k++) { 

       /* de-interlace FFT buffer */ 
       real = gFFTworksp[2*k]; 
       imag = gFFTworksp[2*k+1]; 

       /* compute magnitude and phase */ 
       magn = 2.*sqrt(real*real + imag*imag); 
       phase = atan2(imag,real); 

       /* compute phase difference */ 
       tmp = phase - gLastPhase[k]; 
       gLastPhase[k] = phase; 

       /* subtract expected phase difference */ 
       tmp -= (double)k*expct; 

       /* map delta phase into +/- Pi interval */ 
       qpd = tmp/M_PI; 
       if (qpd >= 0) qpd += qpd&1; 
       else qpd -= qpd&1; 
       tmp -= M_PI*(double)qpd; 

       /* get deviation from bin frequency from the +/- Pi interval */ 
       tmp = osamp*tmp/(2.*M_PI); 

       /* compute the k-th partials' true frequency */ 
       tmp = (double)k*freqPerBin + tmp*freqPerBin; 

       /* store magnitude and true frequency in analysis arrays */ 
       gAnaMagn[k] = magn; 
       gAnaFreq[k] = tmp; 

      } 
+2

"사실상 변경되지 않습니다."라는 말이 의미가 없습니다. 어떤 경우에는 변화를 일으 킵니다. 그것에 대해 가상적인 것은 없습니다. – Mat

+0

오, 죄송합니다. 매트! 내가 의미하는 바는 아무런 변화가 없다는 것입니다. 비트 연산자에 대한 이해에서 읽을 때 변경되지 않는 것처럼 보입니다. 마지막으로 아래 답변에서 그것을 이해했습니다. :) – user3160974

답변

7

코드는 둥근 숫자 옆에도 값으로 사용된다; 아래 번호를 양수 및 음수를 라운딩 예

가 추가 또는 짝수 홀수 번호가 1 또는 0 인 값의 마지막 비트를 감산함으로써 작동
7 becomes 8 
12 remains 12 
-7 becomes -8 

대한.

+0

6402 고마워요! 나는 너의 도움에 대해 대단히 감사한다! 나는 & 이런 식으로 사용할 수 있다는 것을 결코 알지 못했다. 고마워요! – user3160974

+0

@ user3160974 : 6502가 아니라 6402 !!!. 나는 6402가 뭔지 전혀 몰랐다. 6502는 내가 사용한 첫 번째 마이크로의 이름이다. (8-bit, Apple, []). – 6502

+0

아 죄송합니다 6502 !!! 그건 저 오타 때문에 정말 부주의했습니다! 나는 진심으로 사과한다. 도와 주셔서 다시 한 번 감사드립니다! :) – user3160974

1

글쎄, 전체적으로 무엇을하는지는 모르겠지만, 연산자가 수행하는 모든 작업은 기본적으로 qbd이 0보다 크거나 같거나 1보다 작거나 0 인 경우 모두가 첫 번째 비트가 무엇인지에 기반합니다).

원하는지 확실하지 않습니다.

+0

고마워요 조쉬! 그래, 그게 내가 찾고 있던 대답이야. 나는 & 비트 연산자에 대한 나의 이해에 혼란스러워하고 이제 나의 이해가 명확 해졌다. :) – user3160974

+0

기꺼이 도와 드리겠습니다. –