#include<stdio.h>
int main()
{
int a;//32个比特位
int count=0;
scanf("%d",&a);//-1
//整数储存到内存的是补码
//最高位是符号位
//10000000000000000000000000000001---原码
//11111111111111111111111111111110---反码
//11111111111111111111111111111111---补码 --->32个1
//正整数的原码,补码,反码都是它本身
int i;
//方法1
for(i=0;i<32;i++)//32个比特位
{
if(1==((a>>i)&1))
//>>:右移操作符(二进制位) ----右边丢弃,左边补原符号位
//00000000000000000000000000000001------1
//11111111111111111111111111111111------a=-1
//00000000000000000000000000000001------a&1
count++;
}
printf("%d\n",count);
//方法2
while(a)
{
if(a%2==1)
count++;
a=a/2;
}
printf("%d\n",count);
return 0;
}
统计一个整数的补码中有几个1
于 2022-12-31 18:29:09 首次发布