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?

- Rejestracja:ponad 5 lat
- Ostatnio:ponad 2 lata
- Postów:18
0
- 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:
unsigned char x,y;
x=2;
y=3;
cout<<(unsigned int)x-(unsigned int)y<<endl;

KamilAdam
dokładniej konwersja unsigned char -> signed int

- Rejestracja:ponad 5 lat
- Ostatnio:ponad 2 lata
- Postów:18
0
Czy jest sposób na to aby przewidziec takie nie zamierzone konwersje?
- 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.
- Rejestracja:około 16 lat
- Ostatnio:5 miesięcy
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.