把一个数字从个位开始逐个输出
# include<stdio.h>
int main()
{
int num=12345;
int tmp=0;
while(num>0)
{
tmp=num%10;
num=num/10;
printf("%d\t",tmp);
}
}
把一个数字从高位开始逐个输出
1.若m是一个n位数字,要得到个位:m%10
要丢弃个位:m/10
如果从他的高位开始丢弃,就要先知道n的值,要得到高位:m/10^n
要丢弃高位:m%10^n
求一个数二进制里面1的个数
1) 将一个整数减去1之后,其对应的二进制中最右边的一个1会变为0,若其后存在0,则其之后的所有0都会变为1。基于此,设一个整数为n,则 n & (n-1)之后,会消掉n对应的二进制的最右边的1。因此,将一个数中所有1消掉所用的次数,即为该整数对应的二进制中1的个数。
int countBits(int n)
{
int count = 0;
while(n != 0)
{
n = n & (n-1);
count++;
}
return count;
}
int main()
{
printf("%d\n",countBits(127));
}
要消除整数n最低位的1,可以使用 n = n & (n-1)。
2)将这个数的二进制与1做与操作,如果相与结果为1,,说明这个数二进制末位是一个1,定义一个计数器count=0,count++,再把这个数右移,右移后继续和1做与操作,结果为1,就说明这个数二进制倒二位为1,结果为0.count 不加
知道这个数为零
代码实现
int main()
{
int a = 128;
int count = 0;
while (a)
{
if ((a & 1) == 1)
{
count++;
}
a = a >> 1;
}
printf("count = %d\n", count);
return 0;
}