数字处理方法

把一个数字从个位开始逐个输出

# 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;
}


猜你喜欢

转载自blog.csdn.net/foooooods/article/details/79505138
今日推荐