ionut.hulub Posted February 12, 2012 Report Posted February 12, 2012 (edited) Se da codul:unsigned int i = 4;for (; i > 2; i*=2);printf("%d", i);Da eroare? Daca da, ce eroare? Daca nu, ce afiseaza? Edited February 12, 2012 by NemesisITSC Quote
Nytro Posted February 12, 2012 Report Posted February 12, 2012 Ar trebui sa mearga pana la (aproximativ) 2 miliarde, apoi devine negativ. Am vazut ca e ";" dupa for, deci se va afisa (aproximativ) -2 miliarde. Quote
ionut.hulub Posted February 12, 2012 Author Report Posted February 12, 2012 imi cer scuze. acum am modificat codul. am uitat sa pun 'unsigned' prima data. Quote
ionut.hulub Posted February 13, 2012 Author Report Posted February 13, 2012 Raspuns gresit.Ca sa intelegem de ce, sa vedem in primul rand cum se represinta o variabila de tip int in memoria calculatorului:int'ul se scrie pe 32 de biti.sa luam numarul 11: 0000..00001011.dar 11 * 2 = 22 care se scrie: 0000... 00010110.dar 22*2 = 44 care se scrie: 000....000101100.observam ca inmultirea unui numar cu 2 este echivalenta cu shiftarea numarului cu 1 bit la stanga.numarul 4 scris in binar este : 000...0000100.rezulta din cele scrise mai sus ca dupa 30 de inmultiri cu 2, rezultatul o sa fie egal cu ce obtinem daca shiftam numarul 4 la stanga cu 30 de pozitii, adica 000...000 care este egal cu 0, si asta este ceea ce va afisa programul. Quote
Nytro Posted February 13, 2012 Report Posted February 13, 2012 Integer overflow - Wikipedia, the free encyclopedia Quote