sdf159372008 发表于 2013-6-11 22:23:50

【求教】关于用“/”和“%”提取多位数中某一位的用法...

本帖最后由 sdf159372008 于 2013-6-11 22:27 编辑

由于是半路出家,没有经过系统的学习,搜索一有些东西仅仅是一知半解,特来求教
有些时候需要提取多位数中的某一个数字显示与LCM上(比如1602)
常用到的就是“/”和“%”
但是我对此的概念比较模糊特来求教
碧柔有一个10位数A=1234567890
如果我要提取出“0”,那么只要A%10,“9”是A%100/10(不知道这样对不对),“8”是A/100(和A%1000/100效果一样?),           
但是我要如何提取出“1”或者“2”呢?

chengjia535 发表于 2013-6-11 22:38:58

个位 = X % 10;
十位 = (X / 10) % 10;
百位 = (X / 100) % 10;
.........

mo_fish 发表于 2013-6-11 22:46:26

就是取商和取余的问题,楼上已经表示出来了

AIHHLI 发表于 2013-6-11 22:56:07

你先要明白取余%和取商/到底是怎么操作的。

sdf159372008 发表于 2013-6-11 23:13:24

chengjia535 发表于 2013-6-11 22:38 static/image/common/back.gif
个位 = X % 10;
十位 = (X / 10) % 10;
百位 = (X / 100) % 10;


好吧……谢谢了!
原来我之前都搞错了啊……

chengjia535 发表于 2013-6-11 23:16:48

这个东西应该没有对错, 看合理性, 易用性, 时间空间复杂度等

xou822 发表于 2013-6-12 11:56:57

取商和取余啊楼主

楼上都说出来了

最近搞DS18B20,深有感触啊

tsb0574 发表于 2013-6-12 13:31:49

分离 太慢,位数稍多用减法比这类快

sdf159372008 发表于 2013-6-12 20:49:59

tsb0574 发表于 2013-6-12 13:31 static/image/common/back.gif
分离 太慢,位数稍多用减法比这类快

不差这点儿,STC12C5A60S2+33Mhz的晶振,可以做任何我能做得到的事儿了……
简单玩玩要求不高的……

tam2907 发表于 2013-6-13 08:20:47

tsb0574 发表于 2013-6-12 13:31 static/image/common/back.gif
分离 太慢,位数稍多用减法比这类快

一般我都先转换为bcd来操作

skype 发表于 2013-6-13 09:21:03

//整数转字符串,最大长度 10 位
void Myitoa(int32_t n, uint8_t str[])
{
    int32_t i, sign;
    uint8_t s;
    uint8_t j=0;
    if((sign=n) < 0)
      n=-n;

    i=0;
    do
    {
      s = n % 10 + '0';
    }while ((n/=10) > 0);

    if(sign < 0)
      s = '-';

    s = '\0';

    //for (; i>0; i-- )
    do{
      str = s;
    }while(--i > 0);
}

jz701209李 发表于 2013-6-13 10:18:18

学习一下....

phoebuss 发表于 2013-6-13 12:34:30

//LCD显示数字函数,5位等宽
void LCD_write_numbers(uint8 x, uint8 y, int numbers)
{
        uint8 nums={' ', ' ', ' ', ' ', ' '};
        uint16 exp10={1,10,100,1000,10000};
        uint8 n, i=1;
        if(numbers < 0)
        {
                nums='-';
                numbers = -numbers;
        }
       
        if(numbers > 9999)
        {
                LCD_write_string(x, y, "#####");
                return;
        }
        else if(numbers > 999)
                n = 4;
        else if(numbers > 99)
                n = 3;
        else if(numbers > 9)
                n = 2;
        else
                n = 1;
       
        while(n)
        {       
                nums = (uint8)(numbers % exp10 / exp10) + '0';
                i++;
                n--;
        }
        LCD_write_string(x, y, nums);
}这是我写的1602用来显示5位等宽数字的代码。为了节省运算资源与时间,一般用数组来存储10的幂~不知你能理解我的意思不...
页: [1]
查看完整版本: 【求教】关于用“/”和“%”提取多位数中某一位的用法...