正数原码、反码、补码相同
1的补码:00000000 00000000 00000000 00000001
故1存储的二进制位中1的个数为1
负数
原码符号位为1
反码为原码原码符号位不变,其他位按位取反
补码为反码+1
-1的原码:10000000 00000000 00000000 00000001
反码:11111111 11111111 11111111 11111110
补码:11111111 11111111 11111111 11111111
故-1存储的二进制位中1的个数为32
int main() {
int count=0;
int num=0;
int i=0;
scanf("%d",&num);
for(i=0; i<32; i++) {
if(((num>>i)&1)==1) {
count++;
}
}
printf("%d的二进制中1的个数为:%d\n",num,count);
return 0;
}
运行结果: