Board logo

标题: 如何取到一个十进制数据的每位上的数字? [打印本页]

作者: answerpro    时间: 2006-7-1 13:35     标题: 如何取到一个十进制数据的每位上的数字?

比如有一个int或long int的数据(例123456),用C语言如何才能单独取出每一个位置上的数字呢(比如个位是6,十位是5……),我需要用在LED数码显示上。


希望大家帮忙。我用了除法,发现会影响其他变量的数据,不知是什么原因。


作者: spideman    时间: 2006-7-1 15:12

我用的就是除法可以的
n_3=Num/100; //求出 n_1,n_2,n_3
n_2=(Num-100*n_3)/10;
n_1=Num-100*n_3-10*n_2;
作者: seuafu2005    时间: 2006-7-3 11:06

可以用移位加与的方式取出

作者: zhwdy81    时间: 2006-7-3 14:41

运算过程中全部都用long型的,就好了
作者: answerpro    时间: 2006-7-5 15:48

全部用long型是不行的,我的目的是取出每位上的数字再通过数码管显示出来。

用除法我现在发现全局变量及全局常量会变成其他乱七八糟的数字。

版主的方法能否给个示例程序。谢谢。
作者: seuafu2005    时间: 2006-7-5 17:41

比方说1234这个数
先和000F与上,得到4;然后原来的1234右移4位,得到0123,再和000F与,得到3,依次类推
作者: zhwdy81    时间: 2006-7-10 09:36

unsigned long longdata=0x1e240;//123456例如最大6位
unsigned long temp;
unsigned char d1,d2,d3,d4,d5,d6;

d1=longdata/100000;
temp=longdata%100000;
d2=temp/10000;
temp=temp%10000;
d3=temp/1000;
temp=temp%1000;
d4=temp/100;
temp=temp%100;
d5=temp/10;
d6=temp%10;

如果要提高运算速度的话,中间再设一个int型的变量

作者: answerpro    时间: 2006-7-18 09:51

版主seuafu2005,你的方法只是取一个16进制数上的每一位的方法吧?
我要求出一个10进制数的每一位。

谢谢zhwdy81,但这个方法我测试过,虽然可以得到正确的结果,但还会修改掉其他变量的值。
作者: strongchen    时间: 2006-7-19 10:58

可以先转换成BCD码,然后再移位得出。
作者: zhwdy81    时间: 2006-7-19 23:36

修改了什么变量啊
我用的时候好好的啊
作者: answerpro    时间: 2006-7-24 08:48

可能是我数据类型没有设置正确,现在好象已经好了。感谢各位的解答。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0