【求教】关于用“/”和“%”提取多位数中某一位的用法...
本帖最后由 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”呢?
个位 = X % 10;
十位 = (X / 10) % 10;
百位 = (X / 100) % 10;
......... 就是取商和取余的问题,楼上已经表示出来了 你先要明白取余%和取商/到底是怎么操作的。 chengjia535 发表于 2013-6-11 22:38 static/image/common/back.gif
个位 = X % 10;
十位 = (X / 10) % 10;
百位 = (X / 100) % 10;
好吧……谢谢了!
原来我之前都搞错了啊…… 这个东西应该没有对错, 看合理性, 易用性, 时间空间复杂度等 取商和取余啊楼主
楼上都说出来了
最近搞DS18B20,深有感触啊 分离 太慢,位数稍多用减法比这类快 tsb0574 发表于 2013-6-12 13:31 static/image/common/back.gif
分离 太慢,位数稍多用减法比这类快
不差这点儿,STC12C5A60S2+33Mhz的晶振,可以做任何我能做得到的事儿了……
简单玩玩要求不高的…… tsb0574 发表于 2013-6-12 13:31 static/image/common/back.gif
分离 太慢,位数稍多用减法比这类快
一般我都先转换为bcd来操作 //整数转字符串,最大长度 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);
}
学习一下.... //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]