Autor Tema: AYUDA!!! al sumar numeros grandes obtengo un numero negativo!!!  (Leído 1138 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado katp1307

  • PIC10
  • *
  • Mensajes: 3
AYUDA!!! al sumar numeros grandes obtengo un numero negativo!!!
« en: 22 de Noviembre de 2019, 18:10:53 »
Hola!!! Estoy generando la serie de fibonacci con ayuda de un pic18f4553 en una lcd 16*2, y al sumar dos numeros muy grandes obtengo un numero negativo. Cabe resaltar que ya he definido las variables como unsigned long para trabajar con numeros de 32 bit.
muchas gracias. :D

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8137
Re:AYUDA!!! al sumar numeros grandes obtengo un numero negativo!!!
« Respuesta #1 en: 22 de Noviembre de 2019, 18:55:51 »
1- Programa.
2- ¿Como lo estas convirtiendo? - Tal ves la rutina de conversion es unicamente para numeros con signo o no puede manejar numeros tan grandes.

Desconectado Robert76

  • PIC18
  • ****
  • Mensajes: 420
Re:AYUDA!!! al sumar numeros grandes obtengo un numero negativo!!!
« Respuesta #2 en: 22 de Noviembre de 2019, 19:44:23 »
Hola, cuándo sumas dos números sin signo que DESBORDAN, pues te dará un número negativo.
Si trabajas con 32 bits es decir DWORDs, tendrás que trabajar con QWORDs, habrá que ver si el IDE te permite trabajar con ese segmento.

Desconectado katp1307

  • PIC10
  • *
  • Mensajes: 3
Re:AYUDA!!! al sumar numeros grandes obtengo un numero negativo!!!
« Respuesta #3 en: 22 de Noviembre de 2019, 19:47:42 »
1- Programa.
2- ¿Como lo estas convirtiendo? - Tal ves la rutina de conversion es unicamente para numeros con signo o no puede manejar numeros tan grandes.

ese es el codigo:

#include <pic18f4553.h>
#include "CONFIG.h"
#define _XTAL_FREQ 20000000
#include <stdio.h>
#include <teclado_digital.h>
#include <lcd8.h>

char linea[40];
char i;
int opcion=0,tecla=255,menu=0,parte=0;


void main(void){
    lcd_inicializar();
    unsigned long a=0,b=1,resultado;
    lcd_borrar();
    while(1){
        resultado=a+b;
        a=b;
        b=resultado;
        lcd_posicion(0,0);
        lcd_escribir("SERIE FIBONACCI:");
        lcd_posicion(1,0);
        sprintf(linea,"%16d",resultado);
        lcd_escribir(linea);
        __delay_ms(500);
    }
}

sin embargo al sumar el numero 17711 con 28657 se obtiene el numero negativo que parece en la imagen

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8137
Re:AYUDA!!! al sumar numeros grandes obtengo un numero negativo!!!
« Respuesta #4 en: 22 de Noviembre de 2019, 20:19:20 »
Código: C
  1.         sprintf(linea,"%16d",resultado);

La d es para signed int, Lu es para unsigned long

Código: C
  1.         sprintf(linea,"%16Lu",resultado);

Fuente: Manual de CCS

Desconectado katp1307

  • PIC10
  • *
  • Mensajes: 3
Re:AYUDA!!! al sumar numeros grandes obtengo un numero negativo!!!
« Respuesta #5 en: 22 de Noviembre de 2019, 21:20:03 »
Código: C
  1.         sprintf(linea,"%16d",resultado);

La d es para signed int, Lu es para unsigned long

Código: C
  1.         sprintf(linea,"%16Lu",resultado);

Fuente: Manual de CCS


muchas gracias!!!! aun soy un novato en esto de la pogramacion, si pueden hacer el favor de compartime material de estudio para mejorar cada dia se los agradeceria :D

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8137
Re:AYUDA!!! al sumar numeros grandes obtengo un numero negativo!!!
« Respuesta #6 en: 22 de Noviembre de 2019, 21:35:25 »
Citar
muchas gracias!!!! aun soy un novato en esto de la pogramacion, si pueden hacer el favor de compartime material de estudio para mejorar cada dia se los agradeceria :D

Practica, complicarse con problemas sencillos, y resolverlos uno mismo. En este caso por ejemplo podrias haber tratado de mostrarlo en Hexadecimal y ver si estaba correcto, etc, para verificar que es lo que fallaba.

Y por otro lado, el manual de CCS, que en google buscas "CCS manual pdf" y listo.. Eso si.. mucho pero mucho ingles.

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 596
Re:AYUDA!!! al sumar numeros grandes obtengo un numero negativo!!!
« Respuesta #7 en: 07 de Marzo de 2020, 06:09:02 »
Citar
muchas gracias!!!! aun soy un novato en esto de la pogramacion, si pueden hacer el favor de compartime material de estudio para mejorar cada dia se los agradeceria :D

Practica, complicarse con problemas sencillos, y resolverlos uno mismo. En este caso por ejemplo podrias haber tratado de mostrarlo en Hexadecimal y ver si estaba correcto, etc, para verificar que es lo que fallaba.

Y por otro lado, el manual de CCS, que en google buscas "CCS manual pdf" y listo.. Eso si.. mucho pero mucho ingles.

 El archivo de ayuda que incluye el ccs es muy útil y completo. Yo de echo es lo que más uso cuando tengo dudas con funciones sobre todo propias de ccs.


 

anything