簡體   English   中英

了解使用&Bitwise運算符

[英]Understanding for the use of the & Bitwise Operator

我一直在分析代碼並試圖理解算法的每個部分。 我遇到了使用按位和運算符的這一部分

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

根據我的理解,該算法希望使用1作為變量qpd的掩碼,但由於該數字僅為1,因此在進行幾乎不做任何更改的操作時沒有多大意義。 因為我迷路了,請在這里賜教。

使用按位運算符獲取數組的數據大小和頻率的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;

            }

該代碼用於將數字舍入到下一個偶數值; 向上舍入正數,向下舍入負數:例如

7 becomes 8
12 remains 12
-7 becomes -8

它的工作原理是加上或減去奇數的1的最后一位或偶數的0的最后一位。

好吧,我不完全確定所有這一切在做什么,但所有&運營商正在做的基本上是加一或零,如果qbd高於或等於零,或減去一或零(所有基於什么第一位是)如果它小於零。

不確定這是不是你想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM