infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: CHERA Laurentiu din Februarie 08, 2012, 18:36:17



Titlul: Caractere
Scris de: CHERA Laurentiu din Februarie 08, 2012, 18:36:17
Salut! Ce parere aveti de urmatoarea problema:
Cod:
cout<<(int)'\0342'<<endl;
afiseaza 7218, in timp ce
Cod:
cout<<(int)(char)0342;
afiseaza -30 care mi se pare logic;

In primul rand 0342 = 226 in baza 10; Cum in char nu putem avea valori mai mari de 127 atunci ne confruntam cu o depasire care e tratata cilic de compilator datorita modificarii bitului de semn, adica -128 + 98 = -30;


Titlul: Răspuns: Caractere
Scris de: c a e n din Februarie 08, 2012, 19:10:33
În primul caz ai două caractere: '\034' și '2'. Rezultatul e "implementation-defined". În al doilea caz ai doar caracterul '\342', care se comportă cum știi.


Titlul: Răspuns: Caractere
Scris de: George Marcus din Februarie 08, 2012, 19:28:41
Ce ai scris tu acolo '\0342' e o constanta de mai multe caractere. E cam ciudat comportamentul lor, dar e ceva de genul:
'abc' = 'a' * 256^2 + 'b' * 256 + 'c'

La tine face cam asa:
'\0342' = '\034' * 256 + '2' = 28 * 256 + 50 = 7218
Daca ar fi fost '\03421' ar fi facut:
'\03421' = '\034' * 256^2 + '2' * 256 + '1' = 28 * 65536 + 50 * 256 + 49 = 1835008 + 12800 + 49 = 1847857


Titlul: Răspuns: Caractere
Scris de: CHERA Laurentiu din Februarie 08, 2012, 19:50:12
Da, multumesc! :D