Miért hibás a következő kód C-ben?
#include<stdio.h>
main()
{
int i;
for(i=0; i<=32767; i+=1)
printf(" Az i értéke:%d\n", i);
return 0;
}
Értetlenségem oka az, hogy C-ben az int tipus értékkészlete -32768 és 32767 között van és a program csak
i<=32766 -ig fut le rendesen, vagyis ezt az értéket írja ki utoljára és utána kilép, ahogyan kell, de ha az értéket módosítom i<=32767-re, ami az értékkészletnek még megfelel, akkor egy végtelen ciklust kapok, ami 32766 vagy 32767 (nem látszik a képernyőn, hogy meddig megy)után csökken 1-ig vagy 0-ig egy mínusz jellel, majd onnan újra növekszik.
Az i=32767-et a printf-el ki lehet íratni.
Vagy ez nem ugyanaz?
"Ha 32766 -hez 1-et hozzáadsz, akkor -32768 lesz."
Ez így nem valami logikus, hisz az értékkészletben még benne lenne.
for(i=0; i<=32767; i+=1)
i sosem éri el a 32768-t, hiszen nincs benne az értékkészletében. Amikor eléri a 32767-t, kiírja, majd növeli az értékét, lesz belőle -32768 (átfordult), és folytatja tovább.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!