Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

9899 - Полный справочник по языку Си - Выпуск 4: Представление данных (часть 2)


Информационный Канал Subscribe.Ru

"9899"
Полный справочник по языку Си
Выпуск 4: Представление данных
(часть 2)
Мы продолжаем тему гарантий стандартов в отношении представления значений в рамках стандартных реализаций языков Си и Си++. Сегодня речь пойдет о нововведении [C99] ― целочисленных типах специфицированной ширины.
Точность и ширина целочисленных типов
Точностью (precision) целочисленного типа называется количество значащих битов в представлениях значений этого типа, исключая знаковый и padding-биты. Ширина (width) целочисленного типа - это то же, но уже включая знаковый бит, если он есть ([1]).
Значения типов intN_t, uintN_t, int_leastN_t, uint_leastN_t, int_fastN_t, uint_fastN_t, intptr_t, uintptr_t, intmax_t и uintmax_t
[C99] ввел набор целочисленных типов специфицированной ширины (specified-width integer types), собранных в нескольких категориях. Имена этих типов ― это typedef-имена, определяемые в стандартном заголовке .
Знаковые и беззнаковые целочисленные типы точной ширины(exact-width integer types) имеют имена вида intN_t и uintN_t соответственно, где N ― действительная ширина этих типов, записанная как положительное целое число без лидирующих нулей (например, int32_t). Значения таких типов всегда представляются в форме дополнения до двух и не имеют padding-битов.
Любая реализация, имеющая целочисленные типы шириной 8, 16, 32 или 64 бита должна определять соответствующие имена типов точной ширины.
Знаковые и беззнаковые целочисленные типы наименьшей ширины (minimum-width integer types) имеют имена вида int_leastN_t и uint_leastN _t соответственно, где N ― ширина, не меньшая действительной ширины этих типов, записанная как положительное целое число без лидирующих нулей (например, int_least24_t). Гарантируется, что в рамках одной реализации для каждого из этих типов нет никакого другого целочисленного типа с еще меньшей шириной (не меньшей N).
Следующие восемь типов должны быть определены. Определения других типов этой категории не обязательны.
int_least8_t    uint_least8_t
int_least16_t   uint_least16_t
int_least32_t   uint_least32_t
int_least64_t   uint_least64_t
Знаковые и беззнаковые наиболее быстрые целочисленные типы минимальной ширины (fastest minimum-width integer types) имеют имена вида int_fastN_t и uint_fastN_t соответственно, где N ― ширина, не меньшая действительной ширины этих типов, записанная как положительное целое число без лидирующих нулей (например, int_fast16_t). В отличие от типов int_leastN_t и uint_leastN_t, реализация выбирает для этих имен наиболее эффективные (быстрые) в общем случае типы с шириной, не меньшей N.
Следующие восемь наиболее быстрых целочисленных типов минимальной ширины должны быть определены. Определения других типов этой категории не обязательны.
int_fast8_t     uint_fast8_t
int_fast16_t    uint_fast16_t
int_fast32_t    uint_fast32_t
int_fast64_t    uint_fast64_t
Знаковый и беззнаковый целочисленные типы intptr_t и uintptr_t ― заведомо достаточные для хранения указателей на объекты (integer types capable of holding object pointers). Так, если указатель на void привести к любому из этих типов, а затем это целочисленное значение привести обратно к указателю на void, получившееся значение указателя будет равно исходному.
Стандарт не требует определять эти два типа.
Целочисленные типы intmax_t и uintmax_t имеют максимальную ширину в рамках той реализации, в которой они определены. Это означает, что любые значения любых целочисленных типов могут представлены как значения одного из этих типов.
Ниже приведены предельные действительные и минимальные гарантированные значения целочисленных типов специфицированной ширины.
Типы Предельные представимые значения
действительные минимальные
uintN_t 0 0
UINTN_MAX 2N-1
intN_t INTN_MIN -(2N-1-1)
INTN_MAX 2N-1-1
uint_leastN_t 0 0
UINT_LEASTN_MAX 2N-1
int_leastN_t INT_LEASTN_MIN -(2N-1-1)
INT_LEASTN_MAX 2N-1-1
uint_fastN_t 0 0
UINT_FASTN_MAX 2N-1
int_fastN_t INT_FASTN_MIN -(2N-1-1)
INT_FASTN_MAX 2N-1-1
uintmax_t 0 0
UINTMAXN_MAX 264-1
intmax_t INTMAXN_MIN -(263-1)
INTMAXN_MAX 263-1
Ссылки
Целочисленные типы специфицированной ширины: [C99 7.18]; объектное представление (object representation): [C99 6.2.5, 6.2.6], [C++ 3.9]; значение (value): [C99 3.17, 5.2.4.2.1, 6.2.5, 6.2.6], [C99 Rationale 3, 6.5.3.4], [C++ 1.7]; padding-биты (padding bits): [C99 6.2.6.2, 5.2.4.2.2].
Список литературы
[C99] ISO/IEC 9899:1999, Programming Languages ― C
[C99 Rationale] ISO/IEC Rationale for International Standard ― Programming Languages ― C, Revision 5.10 (download, 877Kb)
[C++] ISO/IEC 14882:1998, Programming Languages ― C++

[1] Таким образом, точность и ширина беззнаковых типов совпадают.
    Рассылки Subscribe.Ru

SuperQ.ru ― обзоры софта за неделю
Еженедельная рассылка для тех, кто хочет быть в курсе последних событий в мире программного обеспечения. Кроме этого Вы найдете в ней прямые ссылки на игры, обзор интересных и полезных сайтов, информацию о новых выпусках оффлайн-журналов, немного юмора и кое-что еще. Также Вы можете обратиться к любому из авторов сайта или ведущему рассылки с любой просьбой и мы постараемся Вам помочь.
Подписаться одним кликом
     

.Net Собеседник ― Новости мира Net, C#, ASP.Net
Причиной создания рассылки ".Net Собеседник" было желание поделиться с коллегами информацией, которая так или иначе касается платформы .Net и кажется мне интересной.
Целью создания рассылки являлось удовлетворение потребностей коллег в новостях, происходящих в мире .Net ― сообщение о выходе новых компонент и наборов компонент, созданных для этой платформы, программных продуктов, призванных облегчить или повысить эффективность труда программиста. Кроме того, в каждом номере публикуется перевод части большой статьи (или она размещается целиком, если это позволяет объём рассылки), интересной тем, кто использует C# и ASP.Net для разработки приложений, а также небольшая заметка, рассказывающая о небольших хитростях, которые помогут вам при разработке .Net-приложений.
Начинает рассылку рубрика "От автора", в которой я делюсь своими мыслями и идеями, касающимися всё той же основной тематики. Завершает выпуск, уже традиционно, список вопросов, на которые не было дано ответа на .Net форумах сайта
http://www.sql.ru.
Подписаться одним кликом
     

    Новости
02.20.2004    JTC1/SC22/WG14 ― C
Опубликованы разъяснения к [C99] (C99 Rationale, Revision 5.10, 877Kb)
08.03.2004    JTC1/SC22/WG14 ― C
Опубликован обновленный список дефектов [C99] (C99 defect reports and record of responses, Revision 1.15)
08.03.2004    JTC1/SC22/WG21 ― C++
Опубликован полный список предложений к языковой части [C++] (C++ Standard Core Language Issues List)
24.02.2004    GNU
Выпущен GNU Си/Си++ компилятор (GCC) версии 3.3.3
23.02.2004    Wind River
Wind River анонсировала новую версию операционной системы реального времени VxWorks 6.0
    В следующем выпуске
В следующем выпуске мы подробно рассмотрим представление и характеристики значений плавающих типов.
С лучшими пожеланиями,
редакция рассылки "9899"
(C) Иван Косарев, 2004. Все права защищены. Публикация и цитирование разрешены только с письменного согласия автора.


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу


В избранное