LINUX.ORG.RU

Вопрос на собеседовании: sizeof(int)

 


0

1

Интересно мнение С++ разработчиков на ЛОР на следующий вопрос (я ответил верно): Ответьте подробно чему может быть равен sizeof(int)?

P.S. Пожалуйста, ответьте сразу и подробно без помощи гугла или чего-то ещё.

≥ 1? :P

// C и С++ знаю на уровне хеловорлда

PolarFox ★★★★★
()
Ответ на: комментарий от andreyu

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

former_anonymous ★★★
() автор топика
Ответ на: комментарий от mbivanyuk

Чему равен где?

ты на собеседовании, друг! Не нужно спрашивать такие вопросы, задача же ясно поставлена - ответить максимально подробно, лучше с примерами.

former_anonymous ★★★
() автор топика
Последнее исправление: former_anonymous (всего исправлений: 1)

4

последний раз видел 2 лет 12 назад.

anonymous
()
Ответ на: комментарий от former_anonymous

Всё верно, но поподробнее.

То есть вы только что одобрили то, что прописано в стандарте языка? Вот спасибо.

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

В реальном мире оговаривают целевую платформу, компилятор и его версию.

andreyu ★★★★★
()
Ответ на: комментарий от former_anonymous

Ты спросил чему может быть равен? Я же ответил - 16, 32 или 64 бит в зависимости от модели памяти. Ну или 2, 4 или 8 если ты про вывод sizeof. Куда конкретнее?

mbivanyuk ★★★★★
()

sizeof(int) не меньше 1, при этом в int всегда не менее 16 бит

anonymous
()

sizeof(int)

Зависит от платформы.
ЕМНИП не менее 2 байт, но на 32-битной - 4 байта.
Не пользовался гуглом, так что могу врать.

Kroz ★★★★★
()
Ответ на: комментарий от mbivanyuk

Ты спросил чему может быть равен? Я же ответил - 16, 32 или 64 бит в зависимости от модели памяти. Ну или 2, 4 или 8 если ты про вывод sizeof. Куда конкретнее?

тебе бы матчасть подучить. sizeof(int) может быть равен 1, при этом быть 32битным

anonymous
()
Ответ на: комментарий от nonimous

Согласно стандарту - от 2 до бесконечности. На практике - везде 4.

согласно стандарту - больше либо равен short и меньше либо равен long. точка.

vvviperrr ★★★★★
()
Ответ на: комментарий от former_anonymous

Теоретически конечно. sizeof(short) <= sizeof(int) <= sizeof(long). Практически 2, 4 или 8. Элементарные вещи же вроде, не?

mbivanyuk ★★★★★
()

Блин, для того и придумали sizeof чтобы писать sizeof(int), а не парить мозг чему он равен. Выясняется за две секунды, если уж приспичило. лавров.jpg

ilovewindows ★★★★★
()
Последнее исправление: ilovewindows (всего исправлений: 1)
Ответ на: комментарий от Kroz

Зависит от платформы.

ЕМНИП не менее 2 байт, но на 32-битной - 4 байта.

ну и уровень на лоре...

sizeof не в байтах, sizeof в char'ах, в котором не обязательно 8 бит

anonymous
()
Ответ на: комментарий от nonimous

он возвращает размер в байтах/октетах

еще один неуч с октетами, идите на расте писать, неосиляторы

anonymous
()

Ответьте подробно чему может быть равен sizeof(int)?

sizeof(int) ≥ 1

utf8nowhere ★★★
()
Ответ на: комментарий от vvviperrr

С++14, 3.9.1.3

The signed and unsigned integer types shall satisfy the constraints given in the C standard, section 5.2.4.2.1.

C99, 5.2.4.2.1

Their implementation-defined values shall be equal or greater in magnitude (absolute value) to those shown, with the same sign.
minimum value for an object of type int, INT_MIN -32767
maximum value for an object of type int, INT_MAX +32767

nonimous
()

собеседование-то прошел? оффер сделали?

dave ★★★★★
()

Ответьте подробно чему может быть равен sizeof(int)?

А что, зимние каникулы уже начались?

LamerOk ★★★★★
()
Ответ на: комментарий от vvviperrr

Стандарт гарантирует, что размер будет достаточным для этих лимитов, так что определять нижнюю границу в 2 байта вполне корректно. Стандарт не определяет верхнюю границу для лимитов, так что определять верхнюю границу в бесконечность тоже корректно. Требование size_of(short)<=sizeof(int)<=sizeof(long)<=sizeof(long long) этим не отменяется, но уточняется.

nonimous
()
Ответ на: комментарий от nonimous

определять нижнюю границу в 2 байта вполне корректно

иди дальше на php пиши, раз даже оператор sizeof осилить не можешь

anonymous
()

Ответьте подробно чему может быть равен sizeof(int)?

Нулю :-) Лол :-) Отвечаю подробно:

#include <stdio.h>

#define sizeof(x) 0

int
main(int, char**)
{
  printf("%d\n", sizeof(int));
  return 0;
}
В цепепе везде подводный камень :-) Выбирай другой язык :-)

anonymous
()
Ответ на: комментарий от nonimous

по такой логике, вариант, когда в моем компиляторе CHAR_BIT равен 32, а sizeof(char) == sizeof(short) == sizeof(int) == 1 не имеет права на жизнь? хотя стандарт такого не запрещает.

vvviperrr ★★★★★
()
Ответ на: комментарий от anonymous

ну и уровень на лоре...

Да уж..

sizeof не в байтах, sizeof в char'ах, в котором не обязательно 8 бит

Именно в байтах.
http://en.cppreference.com/w/cpp/language/sizeof

...
sizeof( type ) 	(1)
...
1) Returns size in bytes of the object representation of type.
...

То, что байт может быть не обязательно 8 бит - спасибо, KO.

Kroz ★★★★★
()
Ответ на: комментарий от former_anonymous

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

1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)

«Варианты в битах» к обозначенному в теме вопросу отношения не имеют, поскольку sizeof по определению возвращает размер в байтах и

1 == sizeof(char)
всегда.

asaw ★★★★★
()
Ответ на: комментарий от anonymous

man CHAR_BIT

Анонимус, ты читать умеешь?

asaw ★★★★★
()
Ответ на: комментарий от Harald

нет, в char-ах

В байтах, но при этом байт может иметь ширину больше 8 бит.

asaw ★★★★★
()
Ответ на: комментарий от vvviperrr

Внезапно, похоже ты прав. С99, 6.5.3.4.2:

The sizeof operator yields the size (in bytes) of its operand, which may be an expression or the parenthesized name of a type.

Там же, 6.5.3.4.3:

When applied to an operand that has type char, unsigned char, or signed char, (or a qualified version thereof) the result is 1.

Там же, 3.6:

byte - addressable unit of data storage large enough to hold any member of the basic character set of the execution environment

Т.е. C99 (а за ним и С++14) не определяет byte как 8 бит, а значит при CHAR_BIT>8 INT_MAX=32767 может влезть в один byte, а значит sizeof(int) вполне может быть 1.

nonimous
()

Больше или равно единице. Хоть у тебя там троичная система с трайтами из шести трит.

mix_mix ★★★★★
()

Интересно мнение

С таким в толксы.

А вообще, тут мнения быть не может, т.к. есть точный ответ.

Hater ★★
()
Ответ на: комментарий от former_anonymous

Код компилят не мнениями, а компилятором.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.