Konwersja

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?

0

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

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

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

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.

0

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

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