2016-01-15 2 views
1

Рассмотрение вопрос:Что такое sizeof (2.5), равный?

Q2: sizeof(2.5) равно ____.

А.1

В.2

С.3

D.4

Там нет таких суффиксов, как f l F L, поэтому константа с плавающей точкой (2.5) имеет двойной тип. Поскольку ничего не указано, я полагаю, что его значение не указано. Например, в некоторых реализациях, чьи CHAR_BIT является 32 (в результате чего sizeof (char)==sizeof (long), может быть), то ответ может быть B.

Однако, в большинстве случаев, где CHAR_BIT 8, ответ должен быть 8, но 8 нет в списке на бумаге!

На вопрос такого смешного вопроса на экзамене/интервью, что я должен ответить?

PS: Просто игнорируйте эти бесполезные круглые скобки, пожалуйста :) PPS: Является ли IEEE 754 предоставленным стандартом?

+0

Я голосующий, чтобы закрыть этот вопрос как не относящийся к теме, потому что Stack Overflow занимается сломанным кодом, а не сломанными интервьюерами. – Quentin

+0

@Quentin Да, хороший учитель/интервьюер не должен давать своим ученикам/интервьюированным этот вопрос. –

+0

Вопрос может быть приятным (вам нужно знать, что такое 'sizeof', что он работает с выражениями, и каков тип литерала' 2.5'). Однако ответ не может быть определен без дополнительной информации. – Quentin

ответ

10

Этот вопрос непоследовательный: sizeof(2.5) - это реализация. Без дополнительного контекста нельзя определить, какой ответ выбрать.

Если это устный экзамен, вы можете объяснить это экзаменатору и получить очень хорошую оценку, учитывая, насколько вы уже знаете. (btw IEEE-754 - не, утвержденный Стандартом, но очень распространенная реализация double).

Если это письменный экзамен, для которого вы не можете дать дальнейшее объяснение (маргинальное пространство слишком скудное), вы должны выбрать 4 по следующим причинам:

  • экзаменатор может ошибочно предположить 2.5 быть a float, а также ошибочно предполагает, что float всегда должен быть 32 бита, дополнительно ошибочно предполагая, что байты должны быть 8 бит. Это наиболее вероятное объяснение. Будьте осторожны в устном экзамене, чтобы оставаться смиренным, если вы считаете, что знаете лучше, чем экзаменатор, возможно, это так.

  • вопрос может быть с ошибкой, например sizeof("2.5"), но отсутствует ". Для этого вопроса ответ определенно 4, и было бы разумно попытаться обмануть ученика с ответом C.

  • вопрос может быть с ошибкой, например sizeof('2.5'), но отсутствует '. Для этого очень уродливый вопрос, ответ такой же, как sizeof(int), часто 4 на системах с 8-битными байтами. Обратите внимание, что sizeof(2,5) также совпадает с sizeof(int), но это тоже был бы трюк.

  • на некоторых системах DSP, где double - 64 бит и char 16 бит, ответ 4 будет правильным.

  • Другие ответы менее вероятны, если не считать конечно на компьютере DS9K.

+0

Почему sizeof ("2.5") будет ** определенно ** давать 4? Разве это не должно быть 4 в 32-разрядной операционной системе и 8 в 64-разрядной операционной системе? –

+2

@sunqingyao: no, '" 2.5 "' является строковым литералом с 4 'char': '2',' .', '5' ** и **' \ 0', таким образом, точно 4 байта, независимо от размера байта. – chqrlie

+1

О, я подумал: «2.5 "является символом char * вместо char []. Спасибо за то, что вы научили меня чему-то новому сегодня. Принято –

1

sizeof возвращает размер в chars, а не бит. Так, например, sizeof(char) по определению 1.

Однако этот вопрос не очень хорошо написан, так как он специфичен для системы. Моя предположение, что sizeof из double на вашей системе 8, которая будет 64-бит, так как (8 * CHAR_BIT) == `` (предполагая, что общее значение CHAR_BIT как 8).

+0

Как правильно прокомментировал MMC, 32-разрядный 'double' не соответствовал бы стандарту C , Если 'sizeof (double)' действительно '4', у вас либо есть несоответствующая система, либо' CHAR_BIT' должно быть больше, чем '8' (не обязательно 16, но близко). – chqrlie

+0

@chqrlie, выглядит как GCC и лязг оба использует 8 байт дважды в соответствии с этим (64-битной компиляцией): https://godbolt.org/g/a3NjsS Так хороший вызов, я буду корректировать свой ответ :-) –

2

sizeof(2.5) предоставит размер double в байтах - который определяется реализацией.

От стандарта:

5.3.3 Sizeof
Оператор SizeOf дает количество байтов в объекте представления операнда.
Результат sizeof , примененный к любому другому фундаментальному типу (3.9.1), определяется реализацией.

Смежные вопросы