.ro • Vezi subiect - Error overflow

Nu sunt comparate două valori identice. Trebuie doar să construiți gândul potrivit.

Ei bine, atunci.
Două sensuri diferite nu pot fi comparate niciodată. Nicăieri. Întotdeauna când comparați diferite tipuri de valori, una dintre valori este convertită astfel încât tipul să devină același. Deci? De exemplu, dacă comparați Double and Byte, atunci Byte este convertit la Double și va exista o comparație între două Double-s. Dacă un șir și un număr sunt comparate, atunci fie numărul este convertit într-un șir, iar două linii sunt comparate, fie un șir este inclus într-un număr, iar două numere sunt comparate (în funcție de limbă, ce este).
Întotdeauna diferite tipuri de variabile sunt convertite în același tip și numai atunci sunt aceleași tipuri comparate.

Cu aceasta, cineva se va întreba? Nimeni.

Mai departe. Aici avem două sensuri diferite. Înainte de a fi comparate, este necesar "a aduce la un numitor comun" (pentru a le face același tip). Deoarece acestea sunt "mai mult", Integerul devine Lung, și nu invers. După ce Integer este convertit la Long, avem două numere lungi inegale.

Totul este foarte logic.

- Îi separăm fețele zâmbitoare de restul corpului lor, căpitane.
- Așa este! Le decapităm.

Qwertiy a scris: Și dacă da: Cod: Selectați toate punctele (0x80000000LL == 0x80000000. "Da".) "Nu"); O constantă fără un sufix are un int unsigned, o constantă cu sufixul LL semnat mult timp. O conversie implicită a celor două pe o lungă lungă nesemnată se face și se dovedește a fi adevărată.


Um. Este potrivit pentru rezultatul, nu pentru Hacker. Este nevoie de aceleași tipuri ca și în versiunea scrisă pentru VB, și aveți alții. Mai mult "capabil".

etichetă:
cli
jmp etichetă

iGrok a scris: Эмм. Este potrivit pentru rezultat, nu pentru Hacker. Este nevoie de aceleași tipuri ca și în versiunea scrisă pentru VB, și aveți alții. Mai mult "capabil".


Ideea nu este în dimensionalitate, ci în reducere explicită. În varianta pe VB există o constantă hexazecimală fără tip și o constantă cu tip lung. Codul meu arată același principiu - o constantă fără o etichetă de tip și o constantă a unui tip de dimensiune mai mare. În codul Hacker, tipul celor două constante este redus în mod explicit la unul semnat înainte de comparație.

Cod: Selectați toate punctele (0x80000000LL == 0x80000000. "Da".) "Nu");
pune ((lungă lungă) 0x80000000 == (int) 0x80000000. "da". "nu"); Primul rezultat este da, iar al doilea este nu

Puteți compila pentru lung și int cu un compilator pe 16 biți
Linia de fund este că hexazecimalele și constantele de testare fără sufixe sunt tratate în C ca nesemnate.

Ura! O nouă versiune a Unreal Commander a fost lansată!

Qwertiy a scris (a): Linia de jos este faptul că hexazecimal și constantele de testare fără sufixe sunt tratate în C ca nesemnate.

iGrok a scris: Are aceleași tipuri ca în versiunea care este scrisă pentru VB, și aveți alții.

- Îi separăm fețele zâmbitoare de restul corpului lor, căpitane.
- Așa este! Le decapităm.

Qwertiy a scris (a): Linia de jos este faptul că hexazecimal și constantele de testare fără sufixe sunt tratate în C ca nesemnate.

iGrok a scris: Are aceleași tipuri ca în versiunea care este scrisă pentru VB, și aveți alții.


În opinia mea, versiunea dvs. corespunde unei înregistrări H8000 = H8000%. dar nu cea dată în întrebare.

Ura! O nouă versiune a Unreal Commander a fost lansată!

% și astfel este asumat implicit. În plus, dacă vă scrieți versiunea dvs., atunci mediul va lua cu forța procentul de TDC din înregistrarea dvs. Deși, desigur, nimeni nu vă interzice să aveți propriul aspect.

- Îi separăm fețele zâmbitoare de restul corpului lor, căpitane.
- Așa este! Le decapităm.

Hackerul a scris ():% și așa se presupune implicit


Aceasta este diferența dintre VB și C, pe care ați ascuns-o, oferind o exprimare explicită.

Ura! O nouă versiune a Unreal Commander a fost lansată!

Articole similare