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-битная.