您的位置:首页 > 其它

统计一个数中的二进制数值中有多少…

2014-08-29 22:28 169 查看
3.求函数返回值,输入x=9999;int func ( x )
{
int countx = 0;
while ( x )
{
countx ++;
x = x&(x-1);
}
return countx;
}
结果呢?
知道了这是统计9999的二进制数值中有多少个1的函数,且有
9999=9×1024+512+256+159×1024中含有1的个数为2;
512中含有1的个数为1;
256中含有1的个数为1;
15中含有1的个数为4;
故共有1的个数为8,结果为8。
1000 - 1 = 0111,正好是原数取反。这就是原理。
用这种方法来求1的个数是很效率很高的。
不必去一个一个地移位。循环次数最少。结构体存储:二进制存储struct s1
{
int i: 8;
int j: 4;
int a: 3;
double b;
};struct s2
{
int i: 8;
int j: 4;
double b;
int a:3;
};printf("sizeof(s1)= %d\n", sizeof(s1));
printf("sizeof(s2)= %d\n", sizeof(s2));
result: 16, 24要谨记:结构体内部字节对齐规则:往最长的数据类型对齐,并且地址长度为最长数据长度的整数倍

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: