C/计算一个整数二进制位中1的个数

来源:互联网 发布:怎样优化显卡性能 编辑:程序博客网 时间:2024/05/17 22:03

计算一个整数二进制位中1的个数。要求效率尽可能的高。且能正确求正数和负数的二进制中1的个数。
代码:

#pragma once#include<stdio.h>#include<stdlib.h>//计算一个整数二进制位中1的个数。要求效率尽可能的高。且能正确求正数和负数的二进制中1的个数。 //32位,0 --00000000 00000000 00000000 00000000//      1---00000000 00000000 00000000 00000001//     -1 --10000000 00000000 00000000 00000001---原码//          11111111 11111111 11111111 11111110---反码//     -1 --11111111 11111111 11111111 11111111---补码//   最高位是符号位,不发生变化// 计算机存储整型数据以补码的形式// 正确解---与&运算  --补码按位与int count_one_bits(int num){    int count = 0;    while (num)    {        count++;        num = num & (num - 1);    }    return count;}// 不移数字,只移比较的1int count_one_bits1(int num){    int count = 0;    unsigned int flag = 1;    while (flag)    {        if (num & flag)               count++;        flag = flag << 1;    }    return count;}int main(){    int num  = 3;     int ret = count_one_bits1(num);    printf("%d\n", ret);    system("pause");    return 0;}
阅读全文
0 0
原创粉丝点击