Число бит стандартного типа С++
Вот возник вопрос: каким стандартом задается число бит в памяти для стандартных типов С++ для 32-битных компиляторов на платформе интел х86:
wchar_t
short
int
long
long int
long long
float
double
long double
Что то я поискал у себя, но ничего не нашел. Хотя помню, что где то уже читал про это. Где посмотреть на стандарт (достаточно официальную информацию) - дайте ссылку.
Размеры типов не стандартизированны, стандартизированны лишь их соотношения!
char <= wchar_t
bool <= char <= short int <= int <= long int <= long long int
float <= double <= long double
signed == unsigned (для любых типов)
Но у тя на PC скорее всего)
8бит == bool == char == 1
shot int = 2
int == long int == 4
long long int == 8
...
Можешь проверить с помощью оператора sizeof()
Type Size (bits) Range Sample applications
unsigned char 8 0 <= X <= 255 Small numbers and full PC character set
char 8 -128 <= X <= 127 Very small numbers and ASCII characters
short int 16 -32,768 <= X <= 32,767 Counting, small numbers, loop control
unsigned int 32 0 <= X <= 4,294,967,295 Large numbers and loops
int 32 -2,147,483,648 <= X <= 2,147,483,647 Counting, small numbers, loop control
unsigned long 32 0 <= X <= 4,294,967,295 Astronomical distances
enum 32 -2,147,483,648 <= X <= 2,147,483,647 Ordered sets of values
long 32 -2,147,483,648 <= X <= 2,147,483,647 Large numbers, populations
float 32 1.18**10^-38 < |X| < 3.40**10^38 Scientific (7-digit) precision)
double 64 2.23**10^-308 < |X| < 1.79**10^308 Scientific (15-digit precision)
long double 80 3.37**10^-4932 < |X| < 1.18**10^4932 Financial (18-digit precision)
И, конечно же, sizeof :D
Насчёт max/min значений - следует помнить, что знаковость "по-умолчанию" для ряда базовых типов определяется настройками проекта, параметрами компилятора и директивами предпроцессора.
Размеры типов не стандартизированны, стандартизированны лишь их соотношения!
char <= wchar_t
bool <= char <= short int <= int <= long int <= long long int
float <= double <= long double
signed == unsigned (для любых типов)
Но у тя на PC скорее всего)
8бит == bool == char == 1
shot int = 2
int == long int == 4
long long int == 8
...
Можешь проверить с помощью оператора sizeof()[/QUOTE]
Вроде обычно char - 1 байт
wchar_t - 2 байта (юникод)
а short вроде слово (-32768..32767);
Даже смотреть страшно на это (http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/structstd_1_1numeric__limits.html). Стандартная библиотека шаблонов С++ 3-й версии не используется (iostreams предыдущей 2-й версии стандарта тоже). Так как нет их на предполагаемом компиляторе :).
int=размерности шины данных (сейчас 32бита)
char=1байт
short=int/2
long=int*2
long int=long
long long=long*2
double=long*2 ???
long double=double*2
Уже плюнул на это дело и сделал так: ввел свои типы строгой размерности: t_byte t_word t_dword t_qword и использую в программе, где это важно, их. А также сделал H файл настроек, в который для данного компилятора надо вписать чему что соответствует.
Стандарт не регламентирует кратность соотношения размеров ст. типов.
см. мой первый пост в этой теме.
Обычно для максимальной переносимости поступают так как описал grizlyk.
з.ы. Привязоваться к размерностям типов - плохой стиль. В этом есть необходимость лишь в некоторых алгоритмах.
WideCharToMultiByte (см. хелп по Win32 API)