Почему большинство языков не допускают двоичные числа? - PullRequest
17 голосов
/ 27 января 2009

Почему большинство языков программирования не позволяют использовать двоичные числа, такие как десятичные или шестнадцатеричные?

  • В VB.NET вы можете написать шестнадцатеричное число, например & H4
  • В C вы можете написать шестнадцатеричное число, например 0x04

Почему бы не разрешить двоичные числа?

  • & B010101
  • 0y1010

Бонусные баллы! ... На каких языках разрешено разрешать двоичные числа?


Редактировать

Вау! - Таким образом, большинство думает, что это из-за краткости, а старые бедные «волны» думают, что это из-за технических аспектов двоичного представления.

Ответы [ 20 ]

1 голос
/ 08 августа 2009

Каждый язык должен поддерживать двоичные литералы. Я схожу с ума, не имея их!

Бонусные баллы! ... На каких языках разрешены двоичные числа?

Значок позволяет использовать литералы в любой базе от 2 до 16, а возможно и до 36 (моя память становится тусклой).

1 голос
/ 27 января 2009

Распространено мнение, что длинные строки двоичных цифр, например 32 бита для целого, слишком сложны для людей, чтобы их было удобно анализировать и манипулировать. Шестнадцатеричный, как правило, считается более легким, хотя я не использовал ни того, ни другого, чтобы выработать предпочтение.

Ruby, который, как уже упоминалось, пытается решить эту проблему, позволяя _ свободно вставляться в литерал, например:

irb(main):005:0> 1111_0111_1111_1111_0011_1100
=> 111101111111111100111100
1 голос
/ 27 января 2009

для записи, и ответить на это:

Бонусные баллы! ... На каких языках разрешены двоичные числа?

Specman (он же e) разрешает двоичные числа. Хотя, честно говоря, это не совсем язык общего назначения.

0 голосов
/ 08 августа 2009

Хотя это не является прямым, большинство языков также может анализировать строку. Java может преобразовать "10101000" в int с помощью метода.

Не то, чтобы это было эффективно или что-то еще ... Просто говорю, что это там. Если бы это было сделано в статическом блоке инициализации, это могло бы быть сделано во время компиляции в зависимости от компилятора.

Если вы хорошо разбираетесь в двоичном коде, даже с коротким числом довольно просто увидеть 0x3c как 4, за которыми следуют 2 нуля, тогда как даже такое короткое число в двоичном виде будет 0b111100, что может повредить ваши глаза вы были уверены в количестве единиц.

0xff9f - это ровно 4 + 4 + 1 единицы, 2 нуля и 5 единиц (на первый взгляд битовая маска очевидна). Попытка отсчитать 0b1111111110011111 намного раздражает.

Я думаю, что проблема может заключаться в том, что разработчики языка всегда зацикливаются на hex / восьмеричном / двоичном / любом другом и просто думают так. Если вы менее опытны, я могу полностью понять, как эти преобразования не были бы такими очевидными.

Эй, это напоминает мне кое о чем, что я придумал, думая о базовых преобразованиях. Последовательность - я не думал, что кто-нибудь сможет выяснить «Следующее число», но один парень действительно понял, так что это решаемо. Попробуйте:

10 11 12 13 14 15 16 21 23 31 111

Edit: Кстати, эта последовательность может быть создана путем подачи последовательных чисел в единую встроенную функцию в большинстве языков (Java точно).

0 голосов
/ 08 августа 2009

В Pop-11 вы можете использовать префикс из числа (от 2 до 32) + двоеточие для обозначения базы, например

2: 11111111 = 255

3: 11111111 = 3280

16: 11111111 = 286331153

31: 11111111 = 28429701248

32: 11111111 = 35468117025

0 голосов
/ 27 января 2009

Шестнадцатеричный код менее подробен и может выражать все, что может двоичное число.

В Ruby есть хорошая поддержка двоичных чисел, если вы действительно этого хотите. 0b11011 и т. Д.

0 голосов
/ 27 января 2009

С точки зрения читабельности и удобства использования, шестнадцатеричное представление является лучшим способом определения двоичных чисел. Тот факт, что они не добавляют его, скорее всего, является скорее потребностью пользователя в технологическом ограничении.

0 голосов
/ 27 января 2009

Я ожидаю, что разработчики языка просто не увидели достаточной необходимости добавлять двоичные числа. Среднестатистический кодер может анализировать как шестнадцатеричный, так и двоичный код при обработке флагов или битовых масок Здорово, что некоторые языки поддерживают двоичный формат как представление, но я думаю, что в среднем он мало используется. Хотя бинарный - если он доступен в C, C ++, Java, C #, вероятно, будет использоваться больше, чем восьмеричный!

0 голосов
/ 06 октября 2010

Forth всегда разрешал использовать номера любой базы (до предела размера процессора, конечно). Хотите использовать двоичный код: 2 BASE ! восьмеричный: 8 BASE ! и т. Д. Хотите работать со временем? 60 BASE ! Все эти примеры вводятся из базового набора в 10 десятичных. Чтобы изменить базу, вы должны представить нужную базу из текущей базы номеров. Если в двоичном формате вы хотите переключиться обратно в десятичное число, то 1010 BASE ! будет работать. В большинстве реализаций Forth есть «слова» для перехода к общим базам, например, DECIMAL, HEX, OCTAL и BINARY.

0 голосов
/ 27 января 2009

В Smalltalk это похоже на 2r1010. Вы можете использовать любую базу до 36 или около того.

...