Чи є щось особливе у номері 65535?


11

2¹⁶-1 & 2⁵ = 2⁵ (або? Очевидно?)

Сьогодні розробник запитав мене, що таке побітове значення 65535 & 32, тобто 2¹⁶-1 & 2⁵ =? Спочатку я подумав спонтанно 32, але здавалося легко, після чого я подумав кілька хвилин, а потім відповів 32. 32 здається, це була правильна відповідь, але як? 65535 = 2¹⁶-1 = 1111111111111111 (але це не здається правильним, оскільки це двійкове число все повинно бути -1 (?)), 32 = 100000, але я не міг перетворити це в голові, після чого я все одно відповів 32, оскільки мав відповісти на щось. Чи відповідь 32 насправді тривіальна? Чи однаково 2¹⁶-1 & 2⁵-1 = 31? Чому розробник запитав мене приблизно про 65535?

Двійкове те, що мене попросили оцінити, було 1111111111111111 та 100000, але я не розумію, чому 1111111111111111 не -1. Чи не повинно бути -1? Чи є 65535 число, яке дає переповнення, і як я можу це знати?


3
Має бути щось особливе. Мені це нагадує 56 6635, чеський національний стандарт на пиво. Хммм ... час на пиво.
joshp

5
Ви робите занадто багато припущень: 65535 дає -1 лише в арифметиці доповнення 16-бітних двох. Він дає -0 в арифметиці доповнення 16-бітових і 65535 в 32-бітовій комплементарній арифметиці та доповнення арифметики.
mouviciel

3
Це верхня межа портів TCP.
Рена Лідер

Відповіді:


23

У цьому випадку число трактується як непідписане ціле число, що означає, що всі встановлені біти не дадуть -1 (якби він був підписаний, то так, ви будете правильно). Таким чином, всі 16 біт набору дадуть вам 65535.

Цікаво, що підписаний стан не є фактором при логічних бітових операціях. Біти самі по собі не підписуються, оскільки вони є найнижчим компонентом в комп'ютері. Він задається операцією процесора, якщо біти в ex. реєстр буде оброблятися підписаним або без підпису.

Негативні числа виробляються встановленням найбільш значущого біта (MSB) на істинне, якщо число трактується як підписане (яка "сторона" або який зовнішній біт буде встановлений змінюється залежно від архітектури процесора, тобто big-endian / little-endian ).


9
Більшість сучасних машин перетворюються на негативні, перегортаючи біти і додаючи доповнення одного: 2. Якщо встановити один біт, ви можете мати +0 і -0.
Джеймс

1
Це не обов'язково проблема. Доповнення 1 скорочується до нуля, незалежно від знаку результату. Доповнення 2 скорочується у бік нескінченності. У деяких програмах це може спричинити проблеми.
Джон Р. Стром

18

Це є тривіальним. 65535 у двійковій формі - це все, тому І, якщо ІН з будь-яким X менше 65535 дасть вам X.


10

Відповідаючи на другу частину вашого питання. Ви позначили це якТаким чином, 65535 в 32 бітах є 00000000000000001111111111111111, підписаним або не підписаним, це не -1.

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