Чому 2 ^ 16 є "спеціальним" числом? [зачинено]


48

Гаразд, мені це дурно задавати питання - але в статті Джеффа: Правильне отримання екрана телефону для інтерв'ю і спочатку зазначено в 5 найважливіших питаннях на екрані телефону :

Вони не повинні тупо дивитись на вас, коли ви запитуєте з 2 ^ 16 є. Це спеціальне число. Вони повинні це знати.

Я був деякий час розробником, інженером програмного забезпечення \ код мавпи \ що завгодно, і я не думаю, що я ніколи цього не стикався. Я маю на увазі, я, безумовно, можу порахувати, що двійкові значення виконують основні операції над ними тощо, тощо. Але я не бачу, що є "особливим" у цьому значенні.


6
Це потужність 2? :)
Майкл К

2
@Michael 2^16.1також потужність 2, але нічого особливого. Те саме для 2^0.
праворуч

4
@Radek: 2**0є 1, що насправді є дуже особливим числом;) Але так, ми, як правило, стосуємось лише двох повноважень, де показник - натуральне число.

1
Ну чому ж 10 ^ 3 або 10 ^ 6 - це спеціальне число?

4
Це питання інтерв'ю з 90-х? 16 біт тоді були особливими
Chris S

Відповіді:


81

(2 16 - 1) або 65535 або 0xFFFF"64k" - максимальне значення 2 байти. Тривалий час використовувані процесори 16-бітної архітектури та ОС також базувалися на 16-бітних операціях та "словах" . Були 16-бітні команди та 16-бітні адреси пам'яті. Багато систем / компіляторів досі використовують 16 біт для цілих чисел.

Отже, (2 16 - 1) є особливим, оскільки це найбільше число, яке може містити 16-бітове (непідписане) ціле число, і найбільша адреса пам'яті, до якої може отримати доступ 16-бітова архітектура.


23
FYI, це також кількість рядків у таблиці Excel :)
Travis Christian

2
Це все-таки межа?
JeffO

6
Я стою виправлений. Можливо, пройшов якийсь час, як я прокрутив всю дорогу вниз.
Тревіс Крістіан

3
@Travis: Останнє речення має помилку по одному; 2 ^ 16 вимагає 17 біт.
ПСУ

2
65535 - це також найвищий номер порту, знайдений у протоколах ipv4 (і ipv6?).
CoatedMoose

58

З повної частини статті зі Стіва Йегге,

Кандидати повинні знати, що таке біти та байти. Вони повинні вміти рахувати у двійкових; наприклад, вони повинні бути в змозі сказати вам, що означає 2 ^ 5 або 2 ^ 10 у десятковій частині. Вони не повинні тупо дивитись на вас, коли ви запитуєте з 2 ^ 16 є. Це спеціальне число. Вони повинні це знати.

Мене відкинули від шматочка, який ви цитували у запитанні; це звучало так, що кандидат повинен бути в змозі описати його значимість, але в контексті він говорить, що кандидати повинні знати вгорі голови, що таке десяткове перетворення 2 16 .

Важливість цього полягає в тому, що оскільки ми, як і раніше, використовуємо десятки для підрахунку, особливо в головах (у більшості випадків), нам потрібно знати грубі потужності загальних байтових блоків, які ми використовуємо для зберігання, пам'яті або навіть кодування символів. Оскільки байт становить 8 біт, найбільш поширеними є 8, 16, 24, 32 та 64.

В даний час я б сказав, що 2 32 є найпоширенішим потенціалом, з яким розробник має справу. Я підозріло ставляться до розробників, які не знають, що 2 32 - це приблизно 4 мільярди (максимум значення - 2 мільярди, якщо вони підписані), оскільки це означає, що вони ніколи не намагалися дізнатися, скільки записів може зберігатися в їх базах даних, які використовувати 32-розрядні ints для первинних ключів, або коли старий код, що використовує 32-бітний ints для ідентифікаторів, дат тощо, потрібно буде відновити до 64-бітного. 1

2 16 - загальна ємність Java short. (Загальна кількість від -2 15 до 2 15 -1)

Розробник повинен напам'ять знати, що таке 8-бітний. Серед багатьох поширених звичаїв - кодування символів ASCII.

Я б не очікував, що програміст взагалі знає 2 14 або 2 18 , але я, мабуть, сподіваюся, що вони знають 2 16, оскільки це дуже часто зустрічається число і досить коротке число (65536), щоб легко запам'ятати повне число.


1: Якщо ви переглядаєте таблицю лідерів Call of Duty: MW2 або iPhone ігрового центру iPhone, ви часто побачите шахраїв у верхній частині із високими показниками 2,147,483,647, що становить 2 31 -1, максимальне значення підписаного 2 32 цілого числа.


22
Добре пам’ятати, що 2 ^ 10 - це приблизно одна тисяча, а звідти ви отримуєте 2 ^ 20 - це мільйон, а 2 ^ 30 мільярд тощо. І за допомогою цього дещо легко «побачити», що 2 ^ 14 - це шістнадцять мільйонів, тож ви можете швидко робити розумові перетворення між двійковими та десятковими. І 2 ^ 64 - 16 * 10 ^ 18, що є хм ... 16 мільярдів мільярдів :)
Маглоб

@Maglob, дякую, хороший момент. Варто відзначити, як ви приїхали в 2 ^ 64, оскільки це зайняло у мене хвилину. 1000 - 10 ^ 3, що приблизно 2 ^ 10. 64 - 4 і 60. 60/10 - це 6, 6 * 3 - 18, тож ви отримаєте: 10 ^ 18 * (2 ^ 4 або 16) ...
Ніколь,

2
Ух. Я зробив помилку друку вище (і я якось не можу її відредагувати) 2 ^ 14 - це, звичайно, шістнадцять тисяч , а не мільйон. (Я здогадуюсь, не так просто «побачити» зрештою :)
Maglob

+1 Хороша відповідь, адже більш повний контекст полягає в тому, що ви шукаєте людину, здатну думати, і, зокрема, мати знання про контекст та домен.
quick_now

4
Гм, ASCII - це 7-бітний .. ;-)
Брендан

3

Єдиною причиною, яку я бачу щодо 2 16 як "особливого", є те, що це одне більше, ніж найбільше ціле число, яке ви можете зберігати в одному реєстрі в 16-бітній операційній системі.

Так само ви можете застосувати ту саму логіку до 2 32 та 32 бітових операційних систем.

Мені потрібно знати більше контексту для цього питання, перш ніж я можу сказати, чи був це важливим знанням чи ні.


Клянусь, я, мабуть, відфільтрував більшу частину написаного вами. Я бачив лише 2 ^ 16 та найвище ціле число.
ChaosPandion

6
Це неточно. Цілком можливо мати 32-розрядний (або вище) тип даних в 16-бітній операційній системі. 16-бітове ціле число - це просто найбільше значення, яке може зберігатися в одному регістрі на 16-бітовому процесорі.
Chinmay Kanchi

@Chinmay - точка взята;)
ChrisF
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.