В том, что вы читаете, есть несколько неточностей. Эти неточности либо присутствовали в источнике, либо, возможно, вы все запомнили неправильно.
Во-первых, педантичное замечание об одном специфическом различии между C и C ++. Язык C не дает никаких гарантий относительно относительных размеров целочисленных типов (в байтах). Язык C только дает гарантии об их относительных диапазонах . Это правда, что диапазон int
всегда по крайней мере такой же, как диапазон short
и так далее. Тем не менее, согласно стандарту C формально разрешено иметь sizeof(short) > sizeof(int)
. В таком случае дополнительные биты в short
будут служить дополнительными битами , не используемыми для представления значения. Очевидно, что это то, что просто разрешено юридическим языком в стандарте, а не то, с чем кто-либо может столкнуться на практике.
В C ++, с другой стороны, спецификация языка дает гарантии как относительно относительных диапазонов , так и относительных размеров типов, поэтому в C ++ в дополнение к вышеуказанным отношениям диапазонов наследуется из C гарантируется, что sizeof(int)
больше или равно sizeof(short)
.
Во-вторых, стандарт языка C гарантирует минимальный диапазон для каждого целочисленного типа (эти гарантии присутствуют как в C, так и в C ++). Зная минимальный диапазон для данного типа, вы всегда можете сказать, сколько значений битов этого типа требуется иметь (как минимальное количество битов). Например, верно, что тип long
должен иметь как минимум 32 формирующих значение бита, чтобы удовлетворять требованиям диапазона. Если вы хотите пересчитать это в байт , это будет зависеть от того, что вы понимаете под термином byte . Если вы говорите конкретно о 8-битных байтах, то тип long
всегда будет состоять как минимум из четырех 8-битных байтов. Однако это не означает, что sizeof(long)
всегда равно как минимум 4, поскольку в терминологии C / C ++ термин byte относится к char
объектам. char
объекты не ограничены 8 битами. В некоторых реализациях вполне возможно иметь 32-битный тип char
, что означает, что sizeof(long)
в байтах C / C ++ может по закону быть, например, 1.