数字处理方法

 

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

 

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


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值