Ich habe folgendes:unsigned int vs unsigned short Unterschied in C++
#include <iostream>
using namespace std;
float f1(unsigned int x, unsigned int y)
{
float val;
val = float(y-x)/(y+x);
return val;
}
float f2(unsigned short x, unsigned short y)
{
float val;
val = float(y-x)/(y+x);
return val;
}
int main()
{
cout << f1(9612, 9038) << "\n" << f2(9612, 9038) << endl;
return 0;
}
Am Ausgang bekomme ich zwei verschiedene Werte von f1
und f2
obwohl ich die Ausgänge erwarten, dass die gleiche sein, da die Funktionen ähnlich sind. Können Sie bitte die Ursache des Unterschieds erklären?
'y' ist kleiner als' x', also ist 'yx' in' f1' eine große positive Zahl, während es in 'f2' entweder eine kleine positive Zahl oder eine kleine negative Zahl ist (abhängig vom relativen Wert) Größen von 'short' und' int' auf Ihrem System) –
Ich habe die Berechnungen ausgeführt und das Ergebnis ist -0.0307774798927614. Vorzeichenlose Typen können keine negativen Werte verarbeiten. – TuukkaX
@TuukkaX: Sie können sicherlich, aber Sie bekommen 2-Komplement. – lorro