Strona kodowa 1250

0

Witam! Czy może mi ktoś wytłumaczyć czemu wynikiem poniższego kodu:

SetConsoleCP(1250);
SetConsoleOutputCP(1250);
char c = 165;
cout<< c<<endl;
int i = (char)c;
cout<<i<<endl;

jest -91 a nie 165 ?? Czy da się osiągnąć rezultat by i posiadało wartość wynikową 165? Pozdrawiam i dziękuję za odpowiedzi !

3

Po pierwsze, to o co pytasz nie ma nic wspólnego z kodowaniem. Pierwsza linijka tylko wpływa na znak, który wypisze pierwszy cout. Natomiast istotne jest to co znaczy char c = 165. To jest mylące, bo typ char ma zakres -128–127, więc 165 jest poza zakresem, wynik jest taki, że w c wartość ta wpisana jest tak jakby to był unsigned char. Dlatego c ma wartość -91, jeśli traktować ją liczbowo. Potem rzutujesz na int i to już nie ma tu wielkiego znaczenia, poza tym, że cout wypisze tę wartość liczbowo.
Tu masz schemat kodowania liczb ze znakiem w x86: https://www.cs.uaf.edu/2008/fall/cs301/lecture/10_17_signed_unsigned.html

1 użytkowników online, w tym zalogowanych: 0, gości: 1