当前位置:首页 » 编程语言 » c语言取位数

c语言取位数

发布时间: 2022-04-17 15:12:35

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
*/

热点内容
图片服务器ftp 发布:2025-01-22 15:52:33 浏览:506
sql打开bak文件 发布:2025-01-22 15:47:32 浏览:106
opengl服务器源码 发布:2025-01-22 15:40:02 浏览:908
python部署服务 发布:2025-01-22 15:38:46 浏览:282
压缩机卡装 发布:2025-01-22 15:37:04 浏览:446
每天跑步40分钟可以缓解压力吗 发布:2025-01-22 15:33:24 浏览:448
线性表的链式存储结构与顺序存储 发布:2025-01-22 15:32:45 浏览:295
解压缩大师 发布:2025-01-22 15:26:51 浏览:386
xp访问win7共享打印机无权限 发布:2025-01-22 15:23:22 浏览:830
python中pandas 发布:2025-01-22 15:21:42 浏览:639