我正在寻找一种方法将两个数字相乘(都是两位数),我用C语言编程,使用PIC18F4455芯片,以及CCS编译器。下面是问题所在:
代码:
#include<18F4455.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#device ICD=TRUE
#use delay(clock=5000000)
#include<lcd.c> //LCD display source code
#include<kbd_xy.c> //keypad source code
void main(){
char k;
//
//code to retrive keypad input and store in a and b values
//
unsigned long c;
unsigned int a=99;
unsigned int b=1;
while(b<99)
{
c=a*b;
printf(lcd_putc,"%Ld",c);
delay_ms(1000);
lcd_putc('\f');
}
}问题是由于芯片是8位的,所以存储在c中的数字不能超过256。所以99*1给099,99*2给198,但99*3给41,注意99*3=297是256+41,依此类推……
我正在寻找一种更好的方法来获得真实的结果,它们将通过LCD显示,所以如果我最终有4个变量,每个变量包含一个数字,我可以接受。如果当我执行99*3时,我得到像c1=7,c2=9,c3=2和c4=0这样的变量,那就太棒了
发布于 2013-02-03 08:33:58
我解决了我自己的问题,似乎在默认情况下,CCS编译器中任何声明的int都是一个int8,所以补救方法非常简单:
#include<18F4455.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#device ICD=TRUE
#use delay(clock=5000000)
#include<lcd.c> //LCD display source code
#include<kbd_xy.c> //keypad source code
void main(){
char k;
//
//code to retrive keypad input and store in a and b values
//
int16 c;
int16 a=99;
int16 b=1;
while(b<99)
{
c=a*b;
printf(lcd_putc,"%Ld",c);
delay_ms(1000);
lcd_putc('\f');
}}
https://stackoverflow.com/questions/14668045
复制相似问题