LINUX.ORG.RU

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

 


0

1

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

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

1 == sizeof(char) ≤ sizeof(int) ≤ sizeof(long).
Всё.

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

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

А на платформах с семибитным байтом?

evilface ★★
()

От 1 до бесконечности. При этом ширина в битах должна быть не меньше 16, так что sizeof(int) == 1 только если ширина char >= 16 бит. На практике sizeof равен 2 или 4. 4 (32 бита соответственно) - на всех современных системах, 2 (16 бит соответственно) - на некоторых микроконтроллерах (8- и 16- разрядных), а также старых машинах (в x86 real mode, например). В принципе рядовому программисту больше знать никакого смысла не имеет, разве что если он работает с какими-то экзотическими архитектурами, где char не 8-битный, но тогда ему надо знать и кучу других особенностей это архитектуры, а ширина char и int наименьшие из них.

Однако надо помнить ещё и тот факт, что стандарт не гарантирует, что числа представляются именно в дополнительном коде, а не в обратном, так что совсем уж гарантированно сохранить в int мы можем лишь значения из диапазона от -32767 до 32767.

Я бы прошёл собеседование, если бы ответил на этот вопрос таким образом?

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

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

А CHAR_BIT дефайнится как 8 чтоб наверняка в октетах было, всегда и везде?

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

Ну если честно, то про обратный код я подсмотрел на cppreference, остальное в принципе знал сам, без гугла.

KivApple ★★★★★
()

От 16 бит для восьмибитной архитектуры до дохрена для всяких плисин. Обычно 32.

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

Лучше не долбить мозг, а если реально требуется знать диапазон используемых данных, писать не int, а int32_t, int64_t, int256_t ...

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

Семибитный байт вероятно придумал тот же маркетологоед что и килограммовые пачки по 900 грамм?

d_a ★★★★★
()

Беги оттуда. Там люди спрашивают вещи, которые не нужно помнить или держать всегда в уме в полноценном виде. Все это решается обращением к нужному разделу стандарта.

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

Не знаю где, но где-то про такой читал.

В PDP-8 12-битное машинное слово, что тоже как бы не 2^N.

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


1
The fundamental storage unit in the C ++ memory model is the byte. A byte is at least large enough to contain
any member of the basic execution character set (2.3) and the eight-bit code units of the Unicode UTF-8
encoding form and is composed of a contiguous sequence of bits, the number of which is implementation-
defined. The least significant bit is called the low-order bit; the most significant bit is called the high-order
bit. The memory available to a C ++ program consists of one or more sequences of contiguous bytes. Every
byte has a unique address.


Как-то так.

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

А почему нельзя чтобы байт был 12 бит? Тут как бы больше вопрос удобства и привычки. Вон, на msp байт 16-бит и ничего (хотя там слегка притянуто за уши конечно). Тут скорее сложилось так, что большинству удобнее 8-битный байт и отклонения от этого причиняют неудобства. И к моменту появления C у большинства байт уже был 8-битный. Хотя ничто не мешает.

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

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

Но я все равно желаю ТС удачи и хорошего настроения.

staseg ★★★★★
()

хорошо что тебе не задали вопрос про UB )
мнения бы разделились как минимум на 3

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

Если речь про Си с такими вопросами, то это может быть эмбеддинг на разных платформах для всяких иотов например. И там имхо байтоебство и такие вопросы на собеседовании вполне оправданы, и может быть вполне интересно. Интерес то ведь дело такое, субъективное... Кому и байтоебство интересно, не всем же формошлепить и со своих высот высокого уровня пренебрежительно относиться к байтоебству.

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

Это была гротескная метафорическая гипербола, чтобы ты понял как звучит твое пренебрежение к низкоуровневым деталям.

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

Ой, ну читай внимательней. Претензия же не к байтам, а к тому, что на собеседовании трепятся о кирпичах, а не о доме. В разработке какого продукта может понадобиться подробное знание о sizeof(int)?

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

Тоже пытался это себе представить. Видимо, это какая-то библиотека, которая должна работать на всём на свете - от 8-битного микроконтроллера до итаника. В общем, какая-то ненаучная фантастика.

asaw ★★★★★
()

ЕМНИП не меньше 16 бит, на практике почти везде 4 байта, сверху не ограничен стандартом, но выполняется условие, что он больше или равен short, меньше или равен long.

ЗЫ

Я не разработчик на C++, знаю его поскольку постольку, мой основной язык - C#, так что могу и ошибаться.

И да, если такое спрашивают - беги, это не то, что надо железно знать, если это не разработка компилятора.

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

Не помню как в шарпе, но в джаве всё ещё проще: все целочисленные типы фиксированных размеров, а до недавнего времени ещё и только знаковые.

evilface ★★
()

зависит от кимпилятора

даже в пределах одной Visaul Studio разных мажорных версий(чутьль не каждая)-размер чар инт лонг меняется,в гцц тоже самое(привет мигрантам с 4.8 на 6.0)...про компиляторы для архитектур-армов ппц спарк...-(ой еще фирменные компиляторы от интела)-там часто нечетные размеры делают

очередной идиотский вопрос идиотского собеседование где тебя тестят на «патимейкерство»(насколько ты друзяшка побухать будешь)

мог вообще по теме не отвечать а рофлить-точно возьмут(можешь в принципе ничего по теме(и профессии в целом) не знать а просто уметь рофлить-тоже возьмут)

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

но в джаве всё ещё проще: все целочисленные типы фиксированных размеров

мои глаза

это джава,привет хело???

тип=класс=наследование=в коде ставишь любой свой размер любому типу глобально на весь код=исполняющая ВМ задает размеры какие хочет=есть только базовый тип/класс с которым ты и В делает все что хочетвплоть до стирания всех базовых полей и значений

anonymous
()

ктото написал что short должен быть меньше int

так вот если в текущей последней версии висуалстудии

сделать так:
опции сборки-УТФ
char xxx='╬' (или любой много байтовый символ)
потом
short yyy=xxx;

т у тебя шорт станет длинее инта в байтах

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

байтоебство с самого собеседования!

по-моему это называется «мозгоебство»

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

Настоящий батя c++ ещё бы и пояснил почему стандарт описывает int именно так. И пару баек из своего опыта рассказал.

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

Видимо, это какая-то библиотека, которая должна работать на всём на свете - от 8-битного микроконтроллера до итаника. В общем, какая-то ненаучная фантастика

libc?

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

Представь себе, в Java есть примитивные типы, не являющиеся классами. К примеру, int, float, etc. Для них даже обёрток наделали (Integer, Float соответственно), чтобы их во всякие дженерики толкать и в прочее ООП.

evilface ★★
()

Зависит от платформы и архитектуры, обычно 16 или 32.

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

Работа обещает быть интересной, байтоебство с самого собеседования!

Понтогоны)))

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

Чтоб дальше-то не дочитать примечание, где недвусмысленно указано, что под байтом имеется в виду char:

Notes
Depending on the computer architecture, a byte may consist of 8 or more bits, the exact number being recorded in CHAR_BIT.
sizeof(char), sizeof(signed char), and sizeof(unsigned char) always return 1.

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

боже мои глаза

Представь себе, в Java есть примитивные типы, не являющиеся классами

не являющиеся классами

ты уверен что ты щас про java???

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

намекну-в даже class (ключевое слово) является классом...там нет ни 1 ключвого слова не являющегося классом

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

Всё верно. В работе такого рода нет творчества. Зато есть место пунктуальности и хорошей памяти. Для любителей алгоритмов и задрачивания байтиков. По мне так, скукота.

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

В разработке какого продукта может понадобиться подробное знание о sizeof(int)?

добро пожаловать в реальный мир

это надо «манагерам» и «владельцам» которые сидя на островах и них-на не делая,хотят видеть усебя идеальных работников

очевидно что от незнания предмета и вылазят такие неадекватные условия(тесты)

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

Char - это тип языка. Байт - единица измерения памяти. Так что это не байт имеет размер char, а char всегда один байт.

А байт может иметь разное количество бит.

Kroz ★★★★★
()

от 1 до бесконечности. Обычно 4 или 8.

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

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

В какой ситуации sizeof(int) == 1 (и при этом он 32 битный)? Интересно даже стало.

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

В какой ситуации sizeof(int) == 1 (и при этом он 32 битный)? Интересно даже стало.

sizeof — это размер в sizeof(char), поэтому sizeof(char) по определению всегда равен единице. Если на платформе минимально адресуемый элемент имеет размер 32 бита, то там может быть 32-битный char и 32-битный int. Тогда sizeof(int) == sizeof(char) == 1.

i-rinat ★★★★★
()
Ответ на: комментарий от unt1tled

В какой ситуации sizeof(int) == 1 (и при этом он 32 битный)? Интересно даже стало.

У меня знакомый в конце 90-х делал самодельный C++ компилятор для каких-то специфических процессоров (с прицелом на встраиваемые системы). Там как раз char, short и int были 32-х битными.

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