Размер и диапазон значений целочисленного значения в С++ зависят от платформы. Значения, найденные в большинстве 32-битных систем, можно найти в Variables. Типы данных. - Документация на С++. Как вы определяете, каковы фактический размер и диапазон для вашей конкретной системы?
Как вы находите диапазон значений, которые могут быть представлены целыми типами в С++?
Ответ 1
Стиль C
limits.h содержит минимальные и максимальные значения для ints, а также другие типы данных, которые должны быть именно то, что вам нужно:
#include <limits.h> // C header
#include <climits> // C++ header
// Constant containing the minimum value of a signed integer (–2,147,483,648)
INT_MIN;
// Constant containing the maximum value of a signed integer (+2,147,483,647)
INT_MAX;
Полный список констант и их общих значений: Wikipedia - limits.h
Стиль С++
Существует метод С++, основанный на шаблонах, как упомянули другие комментаторы, используя:
#include <limits>
std::numeric_limits
который выглядит следующим образом:
std::numeric_limits<int>::max();
и он может даже делать более умные вещи, такие как определение количества цифр или тип подписки или нет:
// Number of digits for decimal (base 10)
std::numeric_limits<char>::digits10;
// Number of digits for binary
std::numeric_limits<char>::digits;
std::numeric_limits<unsigned int>::is_signed;
Ответ 2
Взгляните на std::numeric_limits
Ответ 3
Почему бы просто не быть уверенным и использовать числовые типы boost?
т
boost::uint32_t
boost::int32_t
и т.д.
Ответ 4
Вы можете использовать типы, определенные в stdint.h(или cstdint, если вы используете С++), которые являются частью стандарта C99. Он определяет типы с такими именами, как int32_t, uint8_t, int64_t, и так далее, которые гарантированно являются переносимыми и независимыми от платформы.
Для получения дополнительной информации: stdint.h
Ответ 5
Используйте оператор sizeof()
в С++ для определения размера (в байтах) типа значения. Стандартный файл заголовка библиотеки limit.h содержит пределы диапазона для целочисленных типов значений. Вы можете запустить следующую программу, чтобы узнать размеры и пределы диапазона для целых типов в вашей системе.
#include <stdlib.h>
#include <iostream>
#include <limits>
using namespace std;
int main(int argc, char** argv) {
cout << "\nCharacter Types" << endl;
cout << "Size of character type is " << sizeof(char) << " byte." << endl;
cout << "Signed char min: " << SCHAR_MIN << endl;
cout << "Signed char max: " << SCHAR_MAX << endl;
cout << "Unsigned char min: 0" << endl;
cout << "Unsigned char max: " << UCHAR_MAX << endl;
cout << "\nShort Int Types" << endl;
cout << "Size of short int type is " << sizeof(short) << " bytes." << endl;
cout << "Signed short min: " << SHRT_MIN << endl;
cout << "Signed short max: " << SHRT_MAX << endl;
cout << "Unsigned short min: 0" << endl;
cout << "Unsigned short max: " << USHRT_MAX << endl;
cout << "\nInt Types" << endl;
cout << "Size of int type is " << sizeof(int) << " bytes." << endl;
cout << "Signed int min: " << INT_MIN << endl;
cout << "Signed int max: " << INT_MAX << endl;
cout << "Unsigned int min: 0" << endl;
cout << "Unsigned int max: " << UINT_MAX << endl;
cout << "\nLong Int Types" << endl;
cout << "Size of long int type is " << sizeof(long) << " bytes." << endl;
cout << "Signed long min: " << LONG_MIN << endl;
cout << "Signed long max: " << LONG_MAX << endl;
cout << "Unsigned long min: 0" << endl;
cout << "Unsigned long max: " << ULONG_MAX << endl;
return (EXIT_SUCCESS);
}
Ответ 6
#include<stdio.h>
#include<limits.h>
void main()
{
printf(" signed data types " );
printf(" int min : %d ", INT_MIN); // INT_MIN, INT_MAX, SCHAR_MIN, SCHAR_MAX ....etc
printf(" int max : %d ",INT_MAX);// pre defined constants to get the values of datatypes
printf(" signed char min : %d ", SCHAR_MIN);
printf(" signed char max : %d ", SCHAR_MAX);
// similarly for un_signed
// use %u for control charter, and UINT_MAX, UCHAR_MAX, USHRT_MAX, ULONG_MAX.
}
Ответ 7
Вы можете получить диапазон любого типа данных, применив следующий formulla:
[- 2 мощности (N-1)] до {[+2 power (N-1)] - 1}
Где "N" - это ширина типа данных, например, в JAVA ширина int равна 32, следовательно, N = 32.
Попробуйте это, вы получите его.
Ответ 8
Побитовые операции могут использоваться для поиска количества бит и диапазона int в платформе. Вот пример, который я написал, чтобы проверить диапазон int на моей машине.
#include <iostream>
using namespace std;
void print_int_range() {
int i=1;
int nOfBits=0;
while (i != 0) {
i = i << 1;
nOfBits++;
}
cout << "int has " << nOfBits << " bits" << endl;
cout << "mininum int: " << (1 << (nOfBits - 1)) << ", maximum int: " << ~(1 << (nOfBits - 1)) << endl;
}
void print_unsigned_int_range() {
unsigned int i=1;
int nOfBits=0;
while (i != 0) {
i = i << 1;
nOfBits++;
}
cout << "unsigned int has " << nOfBits << " bits" << endl;
cout << "mininum int: " << (0) << ", maximum int: " << (unsigned int) (~0) << endl;
}
int main() {
print_int_range();
print_unsigned_int_range();
}
И вот мой вывод:
int has 32 bits
mininum int: -2147483648, maximum int: 2147483647
unsigned int has 32 bits
mininum int: 0, maximum int: 4294967295
Ответ 9
sizeof(int)