Wenn ich C++ Header-Dateien von opencv durchsuchen, Es passiert zufällig, das Konstrukt (ptr + n-1) & -n
in alignPtr
Funktion zu sehen. Die vollständige Funktion wie folgt(ptr + n-1) & -n Was bewirkt dieser Ausdruck?
/*!
Aligns pointer by the certain number of bytes
This small inline function aligns the pointer by the certain number of bytes by shifting
it forward by 0 or a positive offset.
*/
template<typename _Tp> static inline _Tp* alignPtr(_Tp* ptr, int n=(int)sizeof(_Tp))
{
return (_Tp*)(((size_t)ptr + n-1) & -n);
}
Können Sie erklären, wie es funktioniert?
Diese kleine Inline-Funktion richtet den Zeiger um eine bestimmte Anzahl von Bytes aus, indem er um 0 oder einen positiven Offset nach vorne verschoben wird. – erip
@erip das ist in der Tat sehr lustig, obwohl die Frage Zitat ist, "wie es funktioniert", Ende des Zitats. – bereal
@bereal Ich habe es nach dem Posten bemerkt. Ich bin nicht lustig. – erip