Autor Tema: Diferencia entre char y signed char  (Leído 1647 veces)

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

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Diferencia entre char y signed char
« en: 05 de Mayo de 2009, 13:33:27 »
Buenas tardes a todos, estoy empezando a aprender a programar pic's en C. He comenzado con varios programas básicos de este foro y me surge la siguiente duda: que diferencia existe entre "char" y "signed char", ya que al cambiarlo en el siguinte programa la forma de actuar es muy difente:

#include <16f648a.h>            //pic a utilizar          
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#use standard_io(B)               //puerto B

///PROGRAMA
void main(void)
{
   signed char i;      //variable indice
   int leds[4]={0b10000001,0b01000010,0b00100100,0b00011000}; //led's      
                  
   set_tris_b(0x00);            //portb como salida
   disable_interrupts(GLOBAL);      //todas las interrupciones desactivadas
   
   do{                        //bucle...
      
      for(i=0;i<4;i++){         //led's on fuera-dentro
         output_b(leds);      //ilumino led's correspondientes
         delay_ms(100);
         }
      for(i=3;i>-1;i--){         //led's on dentro-fuera
         output_b(leds);      //ilumino led's correspondientes
         delay_ms(100);
         }
         
      }while(TRUE);            //...infinito
}

para que funcione correctamente debe de ponerse "signed char" ¿porqué?

Gracias a todos de antemano

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Diferencia entre char y signed char
« Respuesta #1 en: 05 de Mayo de 2009, 13:40:06 »
En CCS todos los tipos de variables son unsigned de forma predeterminada (int8 equivale a unsigned int8). Es necesario que pongas signed char para que abarque valores negativos.

char se crea como unsigned int8 (0 a 255)
signed char se crea como signed int8 (-128 a 127)

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Diferencia entre char y signed char
« Respuesta #2 en: 05 de Mayo de 2009, 14:08:36 »
Y creo q la razon por la cual no funciona tu codigo esta aca:
      for(i=3;i>-1;i--){         //led's on dentro-fuera
Si i esta expresado como unsigned char, entonces no se puede hacer la comparacion i>-1, ya que para esto el compilador resta ambos numeros, y un numero negativo se expresa de forma binaria a uno positivo (ya sea complemento a 2 o como quieran).
Las posibles soluciones serian:
      for(i=3;i>=0;i--){         //led's on dentro-fuera
o
      for(i=3;(signed char)i>-1;i--){         //led's on dentro-fuera
no lo he probado y no se si funciona, pero creeria q si
saludos!!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein