统计一个数中的二进制数值中有多少…
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要谨记:结构体内部字节对齐规则:往最长的数据类型对齐,并且地址长度为最长数据长度的整数倍
{
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要谨记:结构体内部字节对齐规则:往最长的数据类型对齐,并且地址长度为最长数据长度的整数倍
相关文章推荐
- 统计一个自然数的二进制表示形式中有多少个1
- [导入]给定一个英文原文,统计文件里面一共有多少个不同的英文单词
- 计算一个数的二进制表示中有多少个1
- 查找一个short标记数值在二进制文件中第一次出现的位置
- 统计一个数 二进制表达式 1的个数
- 位操作:一个整数的二进制表示中 有多少个1?
- 统计一个数据库中有多少个表
- 计算将一个十进制整数转换成二进制含多少个1
- Java算法总结:输入一个整数,求该整数的二进制表示中有多少个1
- 算法的强大——快速计算一个正二进制整数中包含多少个1
- 机试:反转一个二进制数并输出反转之后二进制的十进制值是多少
- 统计一个二进制数据中1的个数和大于等于当前数的最小的一个二的N次幂
- 求一个整数的二进制后面有多少个0
- 【Vegas原创】用SQL语句统计一个表有多少列
- 每天学习一算法系列(26)(输入一个整数,求该整数的二进制表达中有多少个1)
- 统计给定一个整数以二进制表达时含有1的个数
- 输入一个整数,求该整数的二进制表达中有多少个1
- 统计一个整数的二进制中1的个数(位运算技巧)
- 一个十进制整数转换成二进制含多少个1
- PHP 输入一个整数,求该整数的二进制表达中有多少个1