2016-06-18 7 views
-5
unsigned long get_long(); //returns some crazy large unsigned long 

int i; 

i = get_long() % 20; 

Der Wert der rechten Seite sollte IMMER groß genug sein, um in eine ganze Zahl zu passen, da die möglichen Werte nur {0, 1, 2 ... 18, 19} sind.In C, können Sie das tun? int i; i = get_long()% 20;

Kann ich davon ausgehen, dass der Compiler das unsigned long rechte Seite in eine ganze Zahl auf der linken Seite konvertieren kann?

+1

Was ist 'get_long'? Es ist keine Standardfunktion. Siehe [ask] – Olaf

+0

'groß genug, um in eine ganze Zahl zu passen '... was? –

+0

@ WeatherVane schlechte Formatierung. –

Antwort

1

Ja, wird der Compiler Umwandlung (nicht cast) vom unsigned long int zu int, weil in Ihrem Fall int ist eine Zielart des = Zuweisungsoperators implizit durchführen.

Die INT_MAX ist immer mindestens 32767, also Werte von [0, 19] sind zu erhalten.

1

Ja, wenn der Compiler dem Standard entspricht.

N1570 6.3.1.3 und ohne Vorzeichen ganze Zahlen, Absatz 1 sagt:

Wenn ein Wert mit Integer-Typ in einem anderen Integer-Typ anders als _Bool umgewandelt wird, wenn kann der Wert durch den neuen Typen dargestellt werden Es ist unverändert.

Nach N1570 5.2.4.2.1 Größen von Integer-Typ <limits.h>, int mindestens alle ganzen Zahlen -32.767-32.767 speichern kann, die Umwandlung von Ganzzahl im Bereich von 0 bis 19 ist sicher int .

Verwandte Themen