Dlaczego jak zdefiniujê zmienn± typu unsigned char zm = 128; to w programie wynosi ona 0? A jak wpiszê 129 to ma 1. Tak jakby najwiêksza jej warto¶æ to 127. Czy to jaki¶ nowy standard?
Jakiego typu u¿yæ ¿eby mieæ osiem bitów bez znaku?
Dziêki za pomoc Pawe³
Didn't find your answer? Ask the community — no account required.
I
invalid unparseable
W pêtli for mrygam lampk± tyle razy jaka jest liczba.
unsigned char zm, i;
zm = 130;
for(int i = 0; i < zm; i++) mrygaj;
Dla zmiennych poni¿ej 128 dzia³a dobrze.
Pawe³
I
invalid unparseable
Sorry oczywi¶cie w programie jest bez int i tylko samo i. for(i = 0; i < zm; i++)
Pawe³
I
invalid unparseable
Użytkownik Paweł napisał:
Coś kolega opuścił. Skąd wiadomo że jest równe 0 lub 1 ? Z printfa ? Z debugera ?
unsigned char
Ależ proszę.
Adam
R
RoMan Mandziejewicz
^^^ a to co?
Ja się nie znam ale chyba typ zmiennej sterującej w pętli też jest ważny...
A
Andy
U¿ytkownik "Pawe³" snipped-for-privacy@poczta.onet.pl> napisa³ w wiadomo¶ci news:e5446u$nra$ snipped-for-privacy@news.onet.pl...
Problem jest chyba w porownaniu i< zm. Poniewaz "i" jest typu int a "zm" typu unsigned char to byc moze domyslnie obie sa kastowane na typ int.
Jednak to chyba nie wyjasnia dlaczego gdy zm=128 to miga 1 raz bo 128 to jest -128 jeesli interpretowac ze znakiem.
I
invalid unparseable
Użytkownik Paweł napisał:
Powinno działać ,ale może kompilator jakieś promocje robi samoistnie, bo to chyba raczej nie na pecka.
Możesz spróbować : zm = (unsigned char ) 130;
Daj znać.
Adam
A
AW
Dnia 25.05.2006 Paweł snipped-for-privacy@poczta.onet.pl> napisał/a:
Ja namietnie uzywam zmiennej typu uint8_t
AW
P
Paweł Więcek
Thus wrote Górski Adam <gorskia@.................wp....................pl..................>:
Zgodnie z odwieczną specyfikacją języka ma obowiązek promować char na int.
Paweł
A
arkadiusz.antoniak
Slusznie, jednak w AVR-GCC typ ten najpewniej powstaje tak:
typedef unsigned char uint8_t;
Sprawdz w types.h :).
A
Adam Dybkowski
snipped-for-privacy@wp.pl napisał(a):
Akurat te standardowe typy leżą w inttypes.h (ew. stdint.h)
A
AW
Nie wazne gdzie, wazne ze dziala ;-)
A po co w ogole to tak jest zrobione?
AW
A
arkadiusz.antoniak
looknalem do GMUARM-a ;). Widocznie tu jest inaczej
A
arkadiusz.antoniak
jesli unsigned char z jakich tajemniczych powodow sprawia autorowi problem, to uint8_t zefiniowany tak jak napisalem tez bedzie :)
Glownie po to, aby uniezaleznic sie od platformy. Nie ma reguly, ze unsigned int jest np. 16-bitowy, choc na niektorych platformach wlasnie tak jest. W ARM7 bedzie 32-bitowy itp. itd. unsigned char niemal wszedzie jes 8 bitowy, ale 8-bitowosc to nie jest jego cecha przyrodzona :). Jesli wiec cecha typu ma byc jego dlugosc bitowa, to stosuje sie takie podejscie. Na innej platformie latwo to zmienic - wystarczy podmienic plik z definicjami typow i nie trzeba zmieniac calego programu.
P
Paweł Więcek
Thus wrote snipped-for-privacy@wp.pl:
Z tym tylko, że tam, gdzie char nie jest ośmiobitowy nie znajdzie się ośmiobitowego typu wcale -- bo standard języka narzuca, że char ma się mieścić w pojedyńczym bajcie (który zazwyczaj jest ośmiobitowy, ale...).
Paweł
P
Piotr [PKi
Paweł napisał(a):
A czasem kod mrygania nie jest skopany? Nie podałeś go. Moze mrygaj to zmiana stanu lampki i bedzie taki efekt właśnie?!
D
Deaco
Paweł napisał(a):
mysle ze chyba to to: jedyny blad jaki zrobiles to "int" po for. na poczatku programu deklarujesz zmienna unsigned, czyli od 0 do 255 a potem w forze deklarujesz ja jako int czyli od 0 do 127. ale to jest smieszne poniewaz powinien zadeklarowac od 0 do 32767, przynajmniej tak jest w C, nie wiem jaki masz jezyk programowania, ale to powinno pomoc
M
Marcin Stanisz
Dnia Thu, 25 May 2006 11:32:04 +0200, Paweł napisał(a):
Gdyby było z int stawiałbym na opcję -mint8 przy kompilacji :)
Pozdrawiam Marcin Stanisz
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.