Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Число бит стандартного типа С++

5.7K
20 ноября 2006 года
grizlyk
64 / / 10.04.2005
Доброе утро.

Вот возник вопрос: каким стандартом задается число бит в памяти для стандартных типов С++ для 32-битных компиляторов на платформе интел х86:
Цитата:
char
wchar_t
short
int
long
long int
long long
float
double
long double

Что то я поискал у себя, но ничего не нашел. Хотя помню, что где то уже читал про это. Где посмотреть на стандарт (достаточно официальную информацию) - дайте ссылку.

1.9K
20 ноября 2006 года
[*]Frosty
278 / / 17.06.2006
Хей!
Размеры типов не стандартизированны, стандартизированны лишь их соотношения!
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()
309
20 ноября 2006 года
el scorpio
1.1K / / 19.09.2006
Согласно справочнику Builder

Цитата:

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 значений - следует помнить, что знаковость "по-умолчанию" для ряда базовых типов определяется настройками проекта, параметрами компилятора и директивами предпроцессора.

5.7K
20 ноября 2006 года
grizlyk
64 / / 10.04.2005
[QUOTE='
  • Frosty']Можешь проверить с помощью оператора sizeof()[/QUOTE]Надо задать типы в программе для 8, 16, 32, 64 бит целочисленных данных. Число битов важно. Известно, что компилятор 32 битный. Если стандарта нет, то придется для каждого компилятора настраивать эти типы, что плохо.
  • 1.8K
    20 ноября 2006 года
    k3Eahn
    365 / / 19.12.2005
    std::numeric_limits?
    309
    20 ноября 2006 года
    el scorpio
    1.1K / / 19.09.2006
    для столь однозначного оъявления размерности данных есть типы __int8, __int16, __int32, __int64.
    334
    20 ноября 2006 года
    HexEdit
    809 / / 27.07.2006
    [QUOTE='
  • Frosty']Хей!
    Размеры типов не стандартизированны, стандартизированны лишь их соотношения!
    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);
  • 5.7K
    21 ноября 2006 года
    grizlyk
    64 / / 10.04.2005
    Цитата: k3Eahn
    std::numeric_limits?

    Даже смотреть страшно на это (http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/structstd_1_1numeric__limits.html). Стандартная библиотека шаблонов С++ 3-й версии не используется (iostreams предыдущей 2-й версии стандарта тоже). Так как нет их на предполагаемом компиляторе :).

    3.2K
    21 ноября 2006 года
    Sania
    186 / / 28.10.2006
    Выставляется вроде так:
    int=размерности шины данных (сейчас 32бита)
    char=1байт
    short=int/2
    long=int*2
    long int=long
    long long=long*2
    double=long*2 ???
    long double=double*2
    240
    21 ноября 2006 года
    aks
    2.5K / / 14.07.2006
    Sania, ну вобще char обычно был всегда 8 бит, а на 64-разрядных компиляторов int тоже 32 бита как правило для экономии. Так что некоректно )
    5.7K
    22 ноября 2006 года
    grizlyk
    64 / / 10.04.2005
    Цитата: Sania
    Выставляется вроде так:

    Уже плюнул на это дело и сделал так: ввел свои типы строгой размерности: t_byte t_word t_dword t_qword и использую в программе, где это важно, их. А также сделал H файл настроек, в который для данного компилятора надо вписать чему что соответствует.

    1.9K
    22 ноября 2006 года
    [*]Frosty
    278 / / 17.06.2006
    2 Sania:
    Стандарт не регламентирует кратность соотношения размеров ст. типов.
    см. мой первый пост в этой теме.

    Обычно для максимальной переносимости поступают так как описал grizlyk.

    з.ы. Привязоваться к размерностям типов - плохой стиль. В этом есть необходимость лишь в некоторых алгоритмах.
    21K
    01 декабря 2006 года
    KiskaZ
    15 / / 01.12.2006
    help.... люди добры помогите как можно преобразовать wchar_t к char!!!!:confused:
    302
    01 декабря 2006 года
    Sagittarius
    648 / / 12.04.2003
    Цитата: KiskaZ
    help.... люди добры помогите как можно преобразовать wchar_t к char!!!!:confused:


    WideCharToMultiByte (см. хелп по Win32 API)

    21K
    06 декабря 2006 года
    KiskaZ
    15 / / 01.12.2006
    Спасибо огромное... Я еще нашла функцию в сишной библиотеке...
    Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
    Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог