Re: Гарантии sizeof(char, short, int, long)
От: elcste  
Дата: 24.10.05 12:57
Оценка: 3 (1)
Здравствуйте, Ignoramus, Вы писали:

I>Кроме того гарантируется, что для представления char используется по меньшей мере 8 бит, для представления short – по меньшей мере 16 бит и для long – по меньшей мере 32 бита


I>Так все-таки гарантируется (выделенное) или нет?


Требования к количеству значащих битов задаются через диапазон значений, которые должны быть представимы соответствующим целочисленным типом. Информация о граничных значениях целочисленных типов содержится в стандарте C. В ISO/IEC 9899:1999, как и в ISO/IEC 9899:1990, ее можно найти в разделе 5.2.4.2.1. Там, в частности, гарантируется, что значение UCHAR_MAX должно быть не менее 255 (значение CHAR_BIT, соответственно, не менее 8), значение USHRT_MAX не менее 65535 и значение ULONG_MAX не менее 4294967295.

I>Я пишу переносимый класс, который осуществляет некоторые манипуляции с битами и зависит от размеров фундаментальных типов данной платформы. Однако мне нужно гарантировать, что у передаваемых на вход функций параметров (как раз!) char >= 8 бит, short >= 16 бит, long >= 32 бит. Могу ли я на это рассчитывать?


Да, можете. Но для реализации переносимых битовых операций следует иметь в виду два следующих соображения. Во-первых, для представления наборов битов следует использовать беззнаковые целочисленные типы, т.к. не все возможные битовые паттерны должны представлять валидные значения знаковых типов. Во-вторых, sizeof типа в байтах, строго говоря, не определяет количества значащих битов в целочисленном типе, т.к. не все биты во внутреннем представлении типа должны участвовать в представлении значения. Исключением являются в C++ символьные типы, а в C99 — только unsigned char.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.