8 位系统上的 2 位乘法

问题描述 投票:0回答:1

我正在寻找一种将 2 个数字相乘的方法(都是 2 位数字) 我正在用 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');
    }
}

问题在于,由于芯片是8bit,所以c中存储的数字不能超过256。 所以 991 给出 099,992 给出 198,但是 993 给出 41,注意 993=297,即 256+41 等等...

我正在寻找一种更好的方法来获得真实结果,它们将通过 LCD 显示,所以如果我最终得到 4 个变量,每个变量包含一个数字,那就可以了。由我。 如果当我做 99*3 时我得到像 c1=7 c2=9 c3=2 和 c4=0 这样的变量,那就太棒了

c pic multiplication
1个回答
2
投票

我解决了我自己的问题。看来默认情况下,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');
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.