LINUX.ORG.RU

зависят от платформы,
для переносимости надо использовать что-нибудь типа
uint32

fghj ★★★★★
()

> Подсважите пожалуйста, эти размеры фиксированы или зависят от
> платформы, и надо для переносимости использовать uint... из стандарта
> С99? Просто нет книги по плюсам под рукой.

В C++ стандартного способа получить тип нужного размера нет (т.к. он не
включает в себя C99). В принципе, если поиграться с шаблонами, то
можно, пользуясь numeric_limits, определить тип, допускающий некоторый
наименьший диапазон значений (но нет гарантии, что такой тип вообще
будет, и что он будет допускать _только_ эти значения).

int19h ★★★★
()
Ответ на: комментарий от dilmah

> а такой:
>
> struct xxx
> {
>     int i : 16;
> }

Не прокатит. Если размер int по каким-либо причинам меньше 16 бит, то
поле просто будет дополнено до указанного размера, но использоваться для
хранения значения эти дополнительные биты не будут. Проще говоря,
bit-fields не могут хранить значение в диапазоне большем, чем таковой
базового типа.

int19h ★★★★
()
Ответ на: комментарий от int19h

> сли размер int по каким-либо причинам меньше 16 бит

размер int не может быть меньше 16 бит. Требования есть на то какие целые значения он должен уметь хранить. Точно так же чар может быть 9 бит но не может быть 7.

А так согласен:)

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

> размер int не может быть меньше 16 бит.  Требования есть на то какие
> целые значения он должен уметь хранить.

Где это в стандарте? Я вижу только sizeof(char) <= sizeof(short) <=
sizeof(int) <= sizeof(long).

int19h ★★★★
()
Ответ на: комментарий от int19h

это есть в стандарте Си в секции про limits.h (А для описания limits.h et al стандарт Си++ отсылает к стандарту Си).

Например в N843 в пункте 5.2.4.2.1 Sizes of integer types <limits.h> описываются константы типа INT_MAX. И написано: Their implementation-defined values shall be equal or greater in magnitude (absolute value) to those shown, with the same sign.

И для INT_MAX дается +32767 как минимальное значение.

dilmah ★★★★★
()

Ну чего переливать из пустого в порожнее?

По поводу размеров фундаментальных типов гарантируется следующее:

1 = sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(longint)
1 <= sizeof(bool) <= sizeof(long)
sizeof(char) <= sizeof(wchar_t) <= sizeof(long)
sizeof(float) <= sizeof(double) <= sizeof(longdouble)
sizeof(N) = sizeof(signed N) = sizeof(unsigned N)

где N может быть char,short intmint или long int. Короме того, гарантируется, что для представления char используется по меньшей мере 8 бит, для представления short - поменьшей мере 16 бит и для long - по меньшей мере 32 бита. Переменная типа char может хранить любой символ из машинного набора символов.

Больше ничего про размеры не говорится.

PS: вместо равно должен стоять знак конгруэнтности.

devinull ★★
()
Ответ на: комментарий от dilmah

> это есть в стандарте Си в секции про limits.h (А для описания
> limits.h et al стандарт Си++ отсылает к стандарту Си).

Ага, понял. Спасибо.

int19h ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.