c语言取位数
㈠ c语言中如何提取二进制数中的某一位
下面是三种方式:
①通过模2除2(%2、/2)的方法
num%2——取出二进制的最后一位
num/2——右移去掉二进制的最后一位
通过while循环,依次取出二进制的最后一位数字判断是否为1,若为1则count++,while(num)只有当num变为0时循环结束。
问题:在测试-1出现bug,-1的二进制中应该有32个1,输出却为0。我们将-1带入代码中发现-1%2=0,count不增,然后-1/2=0,循环结束,故输出count的值为0。
解决方案:将变量num的数据类型改为unsigned int (无符号整型),此时表示的是正的整型的最大值,所以当num=-1时,表示二进制为32个1的正数,通过循环可以输出正确的个数。
②通过右移操作符(>>)、按位与操作符(&)实现
Example:当num=10(1010),通过右移操作num>>i,二进制向右移动i位。
//i=0,num>>0,右移0位,此时(1010)&(0001)=0
//i=1,num>>1,右移1位,此时(0101)&(0001)=1,count++
//i=2,num>>2,右移2位,此时(0010)&(0001)=0
//i=3,num>>3,右移3位,此时(0001)&(0001)=1,count++
……
因为二进制共32位,所以循环要执行32次后结束,得到count为2。
缺点:不够高效,必须循环32次。
③通过按位与操作符(&)巧妙运算实现
Example: 当num=15时,
1//num&(num-1)=(1111)&(1110)=(1110)
2//num&(num-1)=(1110)&(1101)=(1100)
3//num&(num-1)=(1100)&(1011)=(1000)
4//num&(num-1)=(1000)&(0111)=0 ,循环停止。共执行4次while循环。
(1)c语言取位数扩展阅读
一、指定的某一位数置1
宏 #define setbit(x,y) x|=(1<<y)
二、指定的某一位数置0
宏 #define clrbit(x,y) x&=~(1<<y)
三、指定的某一位数取反
宏 #define reversebit(x,y) x^=(1<<y)
四、获取的某一位的值
宏 #define getbit(x,y) ((x) >> (y)&1)
㈡ 有没有大神能指点c语言如何用自定义函数求一个数的位数 谢谢大神
#include <stdio.h>
int wei(int num)
{
int n=1;
while(num/10)
{
n++;
num = num / 10;
}
return n;
}
int main()
{
int a=100,b=1000,c=10000;
printf("%d:%d
%d:%d
%d:%d
",a,wei(a),b,wei(b),c,wei(c));
return 0;
}
㈢ C语言取位函数的实现
我有点没搞明白(45、81、673938)取最后一位是怎么得出5138的,不是518吗?
但还是随便写一下吧
#include<stdio.h>
#include<stdlib.h>
intgetLastBit(intnumber);
intmain()
{
inti=0,n=0;
intnumber=0,newnumber=0;
printf("输入整数个数:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&number);
newnumber*=10;
newnumber+=getLastBit(number);
}
printf("新整数是:%d ",newnumber);
return0;
}
intgetLastBit(intnumber)
{
if(number<=0)
{
printf("错误! ");
exit(1);
}
else
returnnumber%10;
}
㈣ c语言里取一个数字的个,十位怎么写
代码如下:
#include<stdio.h>
int main(){
int n = 56789;
int unitPlace = n / 1 % 10;
int tenPlace = n / 10 % 10;
int hundredPlace = n / 100 % 10;
int thousandPlace = n / 1000 % 10;
printf("个位:%d 十位:%d 百位:%d 千位:%d ", unitPlace, tenPlace, hundredPlace, thousandPlace);
getchar();
return 0;
}
运行结果:
个位:9
十位:8
百位:7
千位:6
(4)c语言取位数扩展阅读:
C语言中的除法“/”和取余“%”
1、除法运算符“/”
二元运算符,具有左结合性。
参与运算的量均为整型时,结果为整型,舍去小数。
如果运算量中有一个为实型,结果为双精度实型。
例如:
5/2=2,1/2=0
5/2.0=2.5
2、求余运算符“%”
二元运算符,具有左结合性。
参与运算的量均为整型。
求余运算的结果等于两个数相除后的余数。
例如:
5%2=1,1%2=1
㈤ C语言怎样提取一个数的十位个位百位千位
设一个数为n,则在C语言中其个位、十位、百位、千位依次这样计算:n/1%10,n/10%10,n/100%10,n/1000%10
代码如下:
#include<stdio.h>
int main(){
int n = 123456;
int unitPlace = n / 1 % 10;
int tenPlace = n / 10 % 10;
int hundredPlace = n / 100 % 10;
int thousandPlace = n / 1000 % 10;
printf("个位:%d 十位:%d 百位:%d 千位:%d ", unitPlace, tenPlace, hundredPlace, thousandPlace);
getchar();
return 0;
}
运行结果如图:
(5)c语言取位数扩展阅读
C语言的运算符包含的范围很广泛,共有34种运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C语言的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。
㈥ C语言中如何将一个数字的各个位上的数分别提取
#include<stdio.h>
int main()
{
int a;
int b[111]={0};//这里数组必须赋于初值,不然系统会随机赋值,将输出错误!赋值任何数
scanf("%d",&a);//都行!
int i=0;
while(a!=0)
{
b[i]=a%10;//将各个位的数赋值于数组b[i] ;
a/=10; //现在数组b[i]记录的是各个位上的数的反序;
i++;//i记录这个数是几位数 ;
}
for(int j=i-1;j>=0;j--)
{
printf("%d ",b[j]);//最后反序输出数组b[j];
}
return 0;
}
有不理解的地方,欢迎追问。望采纳!
㈦ 怎样用C程序提取一个3位数的各个数位
如果简单点就int i=123;int k,s;k=i%10;个位数s=(i-100)/10;十位数i=i/100;//百位数
#include
<stdio.h>
void
main()
{
int
a;
int
b,c,d;//各个位数上的数字
printf("请输入一个三位数:");
scanf("%d",&a);
b=a/100;
//百位
c=(a-b*100)/10;
//十位
d=a%10;
//个位
printf("百位:%d,十位:%d,个位%d ",b,c,d);
printf("它们的和是:%d ",b+c+d);
}
(7)c语言取位数扩展阅读:
C语言有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于多种机型。C语言也有自身的不足,比如:C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。从应用的角度,C语言比其他高级语言较难掌握。
C语言既有高级语言的特点,又具有汇编语言的特点;既是一个成功的系统设计语言,又是一个实用的程序设计语言;既能用来编写不依赖计算机硬件的应用程序,又能用来编写各种系统程序;是一种受欢迎、应用广泛的程序设计语言。
㈧ 利用C语言怎样求整数的位数以及各位数之和
#include <stdio.h>
int main(int argc, char **argv)
{
int a;
int sum = 0; //这是各位数的和
int NumWidth =0;//这是位数和
scanf("%d",&a);
while(a != 0)
{
sum += a%10 ; //求余可以得到这个数个位上的数字,然后把它加到sum中
a /= 10; //把这个数字除以10,然后再求余,可以得到10位
NumWidth ++;//每次循环,就可以得到位数。
}
printf("the number you input width= %d, sum = %d",NumWidth,sum);
return 0;
}
㈨ c语言里怎么求任意正整数的位数
其实不用循环也可以做到,对其求以10为底的对数,然后取整数部分再加1,就是这个整数的位数.
下面是代码:
#include<stdio.h>
#include<math.h>
void main()
{
int n;
printf("please input an integer:");
scanf("%d",&n);
printf("%d的位数是%d\n",n,(int)log10(n)+1);
}
㈩ c语言怎样用for循环取出n位数(n由键盘输入)的每位数并输出
定义一个变量a,输入变量并赋值,利用for循环,对a取余,输出余数,除10操作,直到a等于0为止。
//参考代码
#include<stdio.h>
int main()
{
int n,i;//定义整型变量
scanf("%d",&n);//输入赋值
for(;n>0;){//对变量取余输出余数,变量除10,直到变量等于0
printf("%d",n%10);//输出余数
n/=10;//变量除10
}
printf("\n");
return 0;
}
/*运行结果:
123456
654321
*/