Witam!
Poniższy program ma za zadanie na wyświetlaczu wyświetlić zmienne typu "unsigned long int" o dwóch różnych wartościach.
Na wyświetlaczu otrzymuje następującą informację.
ZM1=32767
ZM2= -32768
Dlaczego przekraczając zakres zmiennej int mam ujemny wynik na wyświetlaczu? Przecież zmiena typu "unsigned long int" ma większy zasięg o niż 32768. W załączniku umieszczam cały program .
Proszę używać znaczników code!
Robak
Poniższy program ma za zadanie na wyświetlaczu wyświetlić zmienne typu "unsigned long int" o dwóch różnych wartościach.
#include <avr\io.h>
#include <inttypes.h>
#include <avr\pgmspace.h>
#include "opoznienie.h"
#include "lcd.h"
#include "makra.h"
#include "wypdef.h"
#include <avr/interrupt.h>
#include <avr/signal.h>
unsigned long int zmienna1 = 32767;
unsigned long int zmienna2 = 32768;
int main (void)
{
// Ustawienie portów do sterowania wyświetlaczem
DDR(LCD_EPORT) |= 1<<LCD_E | 0x0F<<LCD_D4;
DDR(LCD_RSPORT) |= 1<<LCD_RS;
//Inicjalizacja wyświetlacza
LCD_INIT();
LCDCLS();
LCD_INIT();
LCDCLS();
LCD_COMMAND(LCD_ON | LCD_ONDISPLAY |LCD_ONCURSOR);
LCDCLS();
LCD_NAPIS("ZM1=");
LCD_DEC(zmienna1);
LCD_COMMAND(LCD_DDA | 64);
LCD_NAPIS("ZM2=");
LCD_DEC(zmienna2);
for(;;)
{
}
return 0;
}
Na wyświetlaczu otrzymuje następującą informację.
ZM1=32767
ZM2= -32768
Dlaczego przekraczając zakres zmiennej int mam ujemny wynik na wyświetlaczu? Przecież zmiena typu "unsigned long int" ma większy zasięg o niż 32768. W załączniku umieszczam cały program .
Proszę używać znaczników code!
Robak