n > 0 && (n & -n) == n在C++中,表达式 n > 0 && (n & -n) == n 是用来检查一个整数 n 是否为2的幂。
让我逐步解释这个表达式的含义:
n > 0:首先,这个条件确保 n 是一个正整数,即大于零。(n & -n):这是一个位操作,使用了按位与(AND)运算符。 -n 表示 n 的二进制补码的相反数。 (n & -n) 的结果是 n 的二进制表示中最右边的 1 所对应的位。这意味着只有当 n 是2的幂时,(n & -n) 的结果才等于 n。(n & -n) == n:最后,这个条件检查 (n & -n) 的结果是否等于 n。如果相等,那么说明 n 是2的幂;否则,n 不是2的幂。因此,通过这个表达式,我们可以判断一个正整数 n 是否为2的幂。