Long long это 8 байтов, значит?

Я прочитал ответы на вопрос, почему sizeof(long long) это 8 на большинстве систем, но я все еще не уверен, как интерпретировать их значение.

Одна из приведенных причин заключается в том, что существует много кода, который предполагает, что sizeof(long long) <= sizeof(size_t), В этом есть смысл. Тогда есть все виды взглядов на архитектурные соглашения и бренды, и т. Д. Я даже не хочу вступать в те дебаты об истории соглашения. Есть также причины, учитывая, что long long может быть любого размера в соответствии со стандартом, но я думаю, что это не совсем то, что касается меня.

То, что я хочу знать, это как интерпретировать разницу между тем фактом, что sizeof(long long) возвращает 8, но это long long на самом деле это 16. Если это следует интерпретировать как исторический остаток, который относится только к sizeof оператор, или есть основной указатель адреса, связанный с этим фактом, так что операции на long long выполняются с шагом 8 байт?

Sizeof (подписано) long v4: 8 Значение (x в 2147483647)v4: 7fffffff

Размер long long v5: 8 Значение (x на 9223372036854775807)v5: 7fffffffffffffff

4 ответа

Согласно стандарту, long long составляет не менее 64 бит или, скажем, 8 байтов.

На большинстве машин сегодня он имеет длину 8 байт. sizeof (Кстати, оператор, а не функция) возвращает его размер, вы можете рассчитывать на него. Нет выбора sizeof(long long) является 8 в то время как размер long long является 16,

Самый длинный стандартный тип данных составляет 8 байтов (64 бита) в большинстве систем, что long long,


Кроме того, вы можете включить limits.h какая библиотека содержит определенные значения для каждого типа данных и места, которое она занимает в вашей системе.


Небольшое обновление во время того факта, что я столкнулся с некоторым уровнем интереса к long, Гарантируется, что он имеет длину не менее 32 бит (или 4 байта). Таким образом long int (хотя в этом случае, long скорее модификатор длины).

Где-то путаница, и я не уверен, где она, потому что вы не говорите, откуда вы берете свои цифры, поэтому я попытаюсь прояснить основы.

sizeofпо определению возвращает количество байтов, которое занимает тип. Во всех современных системах байт состоит из 8 бит, но в некоторых эзотерических или старых архитектурах байт имеет другое количество бит. CHAR_BITиз limits.hговорит вам, сколько битов в байте. Но опять же, на всех современных архитектурах это 8.

sizeof(long long) возвращает 8, но на самом деле long long равно 16.

Это неправда. Если sizoef(long long)равно 8, то имеет длину 8 байт.

Последующий вопрос будет заключаться в том, почему sizeof(long) возвращает 8, но содержит только 4 байта.

Опять же, неправда. Если sizeof (long)является 8затем содержит 8 байт.

Вопрос заключается в том, должны ли мы предвидеть устранение длины 4 байта или нет.

Ни единого шанса в аду. Одним из столпов C и C++ является обратная совместимость. Удаление фундаментального типа сломает практически все программы на планете.

Если вы спросите, есть ли какое-либо использование типа longкогда и, кажется, покрывают все, тогда снова ответ intа также long longне покрывайте все. Есть такие системы, как, например, arduino, где sizeof int == 2, sizeof long == 4а также sizeof long long == 8.

Проблема заключалась в том, что часть вашей системы была переведена на 64-битную версию, а часть системы все еще работала как 32-битная.

Другие вопросы по тегам