Konwersja

ulxoriffh Sdfv
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 2 lata
  • Postów:18
0

Czy mógłby mi ktoś wytłumaczyć z czego wynikaja różnice w wynikach obu programów
unsigned char x,y;
x=2;
y=3;
cout<<x-y<<endl;
unsigned int x,y;
x=2;
y=3;
cout<<x-y<<endl;
Wiem że to ma coś wspólnego z konwersją, oraz że ujemne liczby są konwertowane, z powodu unsigned. Ale nie rozumiem za bardzo tego procesu oraz skąd ta różnica w wynikach. Czy w drugim przypadku liczba -1 jest konwertowana na dodatnia, jeśli tak do dlaczego pierwszy wynik nie jest również zmieniony?

LU
  • Rejestracja:ponad 11 lat
  • Ostatnio:4 dni
  • Lokalizacja:Gdańsk
0

Prawdopodobnie przy odejmowaniu nastąpiła konwersja char -> int.
Jak zrobisz konwersje ręcznie wynik będzie taki sam:

Kopiuj
unsigned char x,y;
x=2;
y=3;
cout<<(unsigned int)x-(unsigned int)y<<endl;

KamilAdam
dokładniej konwersja unsigned char -> signed int
ulxoriffh Sdfv
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 2 lata
  • Postów:18
0

Czy jest sposób na to aby przewidziec takie nie zamierzone konwersje?

LU
  • Rejestracja:ponad 11 lat
  • Ostatnio:4 dni
  • Lokalizacja:Gdańsk
2

Musisz być świadomy istnienia czegoś takiego jak C++ implicit type conversion. https://www.geeksforgeeks.org/type-conversion-in-c/
Przewidzieć w większości przypadków nie trudno np. jeżeli mam 2 dodatnie wartości typu unsigned int, które odejmuje to biorę
pod uwagę to, że może powstać wartość ujemna i to zabezpieczam.


TR
  • Rejestracja:około 16 lat
  • Ostatnio:5 miesięcy
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:12 minut
0

To @trickle podaje właściwe wyjaśnienie. implicit type conversion występuje w innym kontekście.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.