位运算相关函数
作者:
再也不会
,
2022-07-24 13:18:07
,
所有人可见
,
阅读 252
//__builtin_popcount(n) //统计数字n的二进制中,1的个数
int n=2; //二进制为10
cout<<__builtin_popcount(n)<<endl; //输出1
//__builtin_parity(n) //判断n的二进制中1个数的奇偶性
int n=15; //二进制为1111
int m=7; //二进制为111
cout<<__builtin_parity(n)<<endl; //偶数个1,输出0
cout<<__builtin_parity(m)<<endl; //奇数个1,输出1
//__builtin_ctz(n) //判断n的二进制末尾0的个数,n=0时结果未定义
int n=1; //二进制为1
int m=8; //二进制为1000
cout<<__builtin_ctz(n)<<endl; //输出0
cout<<__builtin_ctz(m)<<endl; //输出3
for(int num=0; num<(1<<n); num++){ //二进制枚举-枚举每一个状态 [0,2的n次方-1]
for(int j=0; j<n; j++){ //枚举该状态下二进制的每一位数值
if(num&(1<<j))//当前状态的第i位 是否为1存在
printf(" %d ",a[j]);
}
}
<< 左移运算符 值增大
>> 右移运算符 值减小