Как «двоичные» числа относятся к моему повседневному программированию? - PullRequest
6 голосов
/ 28 января 2012

Я очень стараюсь развить более глубокое понимание программирования в целом.Я понимаю определение «бинарный» из учебника, но что я не понимаю, так это то, как оно применимо к моему повседневному программированию?

Понятие "двоичные числа" против ... ну ... "обычных" чисел полностью потеряно для меня, несмотря на все мои попытки исследовать и понять эту концепцию.

Я - тот, кто изначально учил себя программировать, создавая глупые маленькие приключенческие игры в ранних версиях DOS Basic и C, и сейчас в настоящее время выполняет большую часть своей работы на PHP, JavaScript, Rails и других.«веб» языки.Я обнаружил, что большая часть этой логики абстрагируется в этих языках более высокого уровня, что я в конечном счете чувствую, что мне не хватает многих инструментов, которые мне нужны для продолжения развития и написания лучшего кода.

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

Я не очень ищуопределение »(я уже несколько раз читал страницу в Википедии), но несколько больше указаний о том, как я могу включить это новое знание о том, какие двоичные числа есть в моем повседневном программировании, если оно вообще есть.Сейчас я пишу в основном на PHP, поэтому ссылки на этот язык были бы очень полезны.

Редактировать: Как указывалось .. двоичное - это представление числа, а не другой системы. Итак, чтобы пересмотреть мой вопрос, каковы преимущества (если есть) использованиядвоичное представление чисел, а не просто ... числа.

Ответы [ 8 ]

11 голосов
/ 28 января 2012

Двоичные деревья (один из ваших тегов), в частности деревья двоичного поиска , полезны для некоторых сценариев повседневного программирования (например, сортировки).

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

Двоичные числа полезны для понимания границ, таких как наибольшее число без знака различной ширины (например, 2 ^ 32 - 1 для 32-разрядного) или наибольшее и наименьшее знаковое числоцифры для дополнения до двух (обычно используемая система).Например, почему наименьшее 32-разрядное число с дополнительным числом со знаком двоих чисел -2 ^ 31, а наибольшее 2 ^ 31 - 1?Даже более странная на первый взгляд, - (- 2 ^ 31) (отрицая наименьшее число), дает себя.(Подсказка, попробуйте это с 2-битными числами, так как анализ такой же).

Еще одна базовая теория информации .Сколько бит мне нужно, чтобы представить 10000 возможностей (log 2 10000, округлено в большую сторону)?Это также применимо к криптографии, но вы, вероятно, еще не вдавались в подробности.

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

Если вы изучите pack и побитовые операторы, вы можете найти другие варианты использования.В частности, многие программисты не знают, когда они могут использовать XOR (что можно понять, посмотрев таблицу истинности, включающую две двоичные цифры).

4 голосов
/ 28 января 2012

Вот краткая история, чтобы помочь вашему пониманию, и я подойду к вашему вопросу в конце.

Двоичный код немного странный, потому что мы так привыкли использовать систему счисления с основанием 10.Это потому, что у людей есть 10 пальцев, когда они выбежали, они должны были использовать палку, палец ноги или что-то еще, чтобы представить 10 пальцев.Это не относится ко всем культурам, хотя некоторые популяции охотников-собирателей (такие как австралийские аборигены) использовали систему счисления с основанием 5 (с одной стороны), поскольку производить большие числа не нужно.

В любом случае, причинабаза 2 важна в вычислениях, потому что схема может иметь два состояния: низкое напряжение и высокое напряжение;думайте об этом как о выключателе (включенном и выключенном).Поместите 8 из этих переключателей вместе, и у вас есть 1 байт (8 бит).Лучший способ думать о бите: 1 = вкл. И 0 = выкл. Именно так он и представлен в двоичном виде.Тогда у вас может быть что-то вроде этого 10011100, где 1 - это высокое напряжение, а 0 - это низкое напряжение.В ранних компьютерах использовались физические переключатели, которые оператор мог включать и выключать для создания программы.

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

3 голосов
/ 28 января 2012

Существует два использования двоичных (против обычных ) чисел.

Из-за слова обычный , вероятно, нет:

  • Двоичные данные хранятся в виде компактных байтов, скажем, 4 байта для целого числа, 8 B для двойного. Является ли SQL INT или DOUBLE. Обычный хранится в виде текста, байт на цифру. SQL VARCHAR.

Но в нашем случае:

  • Представление в другой базе нумерации: 101 двоичный = 1 * 4 + 0 * 2 + 1 * 1 = 5.

Это подходит для сложных кодировок состояний да / нет:

Дано 1 | x = 1 и 0 | x = x (или, двоичный +) и 0 & x = 0 и 1 & x = x (и, двоичный *)

$sex_male = 0:
$sex_female = 1;
$employee_no = 0*2;
$employee_yes = 1*2;
$has_no_email = 0*4;
$has_email = 1*4;

$code = $sex_female | $employee_no | $has_email;

if (($code & $sex_female) != 0) print "female";
2 голосов
/ 28 января 2012

Для меня одним из самых значительных эффектов двоичного представления чисел является разница между значениями с плавающей запятой и нашим «обычным» (основанием-10 или десятичным) понятием дробей, десятичных дробей и действительных чисел.

Подавляющее большинство дробей не может быть точно представлено в двоичном виде.Что-то вроде 0,4 кажется, что это не сложное число для представления;у него только одно место после запятой, это то же самое, что две пятых или 40%, что тут сложного?Но в большинстве сред программирования используется двоичная с плавающей запятой, и не может точно представить это число !Даже если на компьютере отображается 0,4, фактическое значение, используемое компьютером, не равно 0,4.Таким образом, вы получаете все виды неинтуитивного поведения, когда дело доходит до округления и арифметики.

Обратите внимание, что эта «проблема» не уникальна для двоичного кода.Например, используя нашу собственную десятичную запись с основанием 10, как мы представляем одну треть?Ну, мы не можем сделать это точно.0,333 это не то же самое, что треть.0.333333333333 тоже не совсем треть.Мы можем подойти довольно близко, и чем больше цифр вы нам дадите, тем ближе мы сможем подойти.Но мы никогда не можем быть точно правильными, потому что для этого потребуется бесконечное число цифр.Это в основном то, что происходит, когда двоичная с плавающей запятой делает то, чего мы не ожидаем: на компьютере нет бесконечного числа двоичных цифр (битов) для представления нашего числа, и поэтому он не может получить его точно верно, но дает нам самое близкое, что может.

1 голос
/ 28 января 2012

Интересный вопрос. Хотя вы «непритязательный парень в сети», я бы сказал, что это здорово, что вам интересно, как бинарный код влияет на вас. Хорошо, чтобы помочь, я бы предложил выбрать язык низкого уровня и поиграть с ним. Нечто подобное программированию на Си и / или сборке. Что касается использования PHP, попробуйте просмотреть исходный код PHP и то, как он реализован. Вот ссылки качества на двоичные / шестнадцатеричные http://maven.smith.edu/~thiebaut/ArtOfAssembly/artofasm.html Удачи и счастливого обучения:)

1 голос
/ 28 января 2012

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

1 голос
/ 28 января 2012

скорее скорее опыт, чем твердый ответ:

на самом деле, вам на самом деле не нужен двоичный файл, потому что он в значительной степени абстрагируется от программирования в настоящее время (в зависимости от того, что вы программируете).Двоичный код более широко используется в проектировании систем и сетей.

некоторые вещи, которые мои коллеги в школе делают по специальности:

  • наборы инструкций процессора и операции (коды операций)
  • сетевое взаимодействие и передача данных
  • хакерство (особенно "подделка" памяти. Больше шестнадцатеричного, но все еще связанного)
  • распределение памяти (в сборке мы используем шестнадцатеричный, но иногда двоичный код)

вам нужно знать, как эти "обычные числа" представляются и понимаются машиной - следовательно, все эти "уроки преобразования", такие как шестнадцатеричное в двоичное, двоичное в восьмеричное и т. Д., Машины читают только двоичное.

0 голосов
/ 28 января 2012

Как веб-парень, вы, без сомнения, понимаете важность юникода. Unicode представляется в шестнадцатеричном формате при просмотре наборов символов, не поддерживаемых вашей системой. Шестнадцатеричное также появляется в значениях RGB и адресах памяти. Hexideciaml, помимо прочего, является сокращением для записи длинных двоичных символов.

Наконец, двоичные числа работают как основание истинности: 1 истинно, а 0 всегда ложно.

Иди, проверь книгу по цифровым фундаментам и попробуй свои силы в булевой логике. Вы никогда больше не будете смотреть на if a and not b or c так же!

...