首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >8位系统上的2位乘法

8位系统上的2位乘法
EN

Stack Overflow用户
提问于 2013-02-03 08:14:09
回答 1查看 238关注 0票数 2

我正在寻找一种方法将两个数字相乘(都是两位数),我用C语言编程,使用PIC18F4455芯片,以及CCS编译器。下面是问题所在:

代码:

代码语言:javascript
复制
    #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这样的变量,那就太棒了

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-03 08:33:58

我解决了我自己的问题,似乎在默认情况下,CCS编译器中任何声明的int都是一个int8,所以补救方法非常简单:

代码语言:javascript
复制
#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');
    }

}

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14668045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档