Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Caractere  (Citit de 1165 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
chera_lary
De-al casei
***

Karma: -2
Deconectat Deconectat

Mesaje: 106



Vezi Profilul
« : 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;
Memorat
caen1
Client obisnuit
**

Karma: 22
Deconectat Deconectat

Mesaje: 75



Vezi Profilul
« Răspunde #1 : 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.
Memorat
PlayLikeNeverB4
Nu mai tace
*****

Karma: 212
Deconectat Deconectat

Mesaje: 721



Vezi Profilul
« Răspunde #2 : 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
Memorat
chera_lary
De-al casei
***

Karma: -2
Deconectat Deconectat

Mesaje: 106



Vezi Profilul
« Răspunde #3 : Februarie 08, 2012, 19:50:12 »

Da, multumesc! Very Happy
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines