Pytanie dotyczy porównania zakresu wartości podstawowych typów całkowitych w C++. Zakres rozumiemy jako minimalną i maksymalną liczbę, jaką da się zapisać w danym typie (dla typów ze znakiem: od wartości ujemnych do dodatnich).
W standardzie C++ rozmiary (a więc i zakresy) typów w stylu short, int, long, long long nie są opisane jedną, stałą liczbą bitów dla wszystkich komputerów. Zależą od implementacji (platformy, ABI, kompilatora). Standard narzuca jednak kluczową relację porządkującą te typy: short ≤ int ≤ long ≤ long long (w sensie możliwości reprezentacji / nie mniejszego zakresu).
Dlatego odpowiedź "long long" jest poprawna wśród podanych opcji: ma gwarantowanie nie mniejszy zakres niż "long int", "int" i "short".
- Odpowiedź "short" jest błędna, bo to typ o najmniejszym (lub jednym z najmniejszych) gwarantowanych zakresów w tej grupie.
- Odpowiedź "int" jest błędna, bo standard dopuszcza, aby "int" był mniejszy od "long" i "long long" (a typowo tak jest).
- Odpowiedź "long int" jest błędna, bo "long long" ma co najmniej tak duży zakres jak "long", więc "long" nie może wyprzedzać "long long".
W praktyce, jeśli w zadaniu lub projekcie wymagany jest konkretny minimalny zakres (np. "dokładnie 64 bity"), lepiej sięgać po typy o stałej szerokości z <cstdint> (np. int64_t) oraz sprawdzać zakresy przez std::numeric_limits. To pomaga unikać błędów przenośności i przepełnień.