Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Преобразование двоичных чисел в десятичные




Сложение и умножение двоичных чисел

Таблица сложения

0 + 0 = 0

0 + 1 = 1

1 + 0 = 1

1 + 1 = 10

 

Пример сложения «столбиком» (14 + 5 = 19):

+  
   
 
 

Таблица умножения

0 • 0 = 0

0 • 1 = 0

1 • 0 = 0

1 • 1 = 1


Пример умножения «столбиком» (14 × 5 = 70):

×      
       
 
+      
     
 
 

Преобразование чисел

Для преобразования из двоичной системы в десятичную используют следующую таблицу степеней основания 2:

Начиная с цифры 1 все цифры умножаются на два. Точка, которая стоит после 1, называется двоичной точкой.

Преобразование двоичных чисел в десятичные

Допустим, вам дано двоичное число 110001. Для перевода в десятичное просто запишите его справа налево как сумму по разрядам следующим образом:

.

Можно записать это в виде таблицы следующим образом:

       
        +32 +16       +1

Точно так же, начиная с двоичной точки, двигайтесь справа налево. Под каждой двоичной единицей напишите её эквивалент в строчке ниже. Сложите получившиеся десятичные числа.
Таким образом, двоичное число 110001 равнозначно десятичному 49.

 

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

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

Структуры данных

Системы типов в языках высокого уровня позволяют определять сложные, составные типы, так называемые структуры данных. Как правило, структурные типы данных образуются как декартово произведение базовых (атомарных) типов и ранее определённых составных типов.

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

Семантика языков программирования

Существует несколько подходов к определению семантики языков программирования.

Наиболее широко распространены разновидности следующих трёх: операционного, денотационного (математического) и деривационного (аксиоматического).

При описании семантики в рамках операционного подхода обычно исполнение конструкций языка программирования интерпретируется с помощью некоторой воображаемой (абстрактной) ЭВМ.

Деривационная семантика описывает последствия выполнения конструкций языка с помощью языка логики и задания пред- и постусловий. Денотационная семантика оперирует понятиями, типичными для математики — множества, соответствия, а также суждения, утверждения и др.

Парадигма программирования

Язык программирования строится в соответствии с той или иной базовой моделью вычислений и парадигмой программирования.

Несмотря на то, что большинство языков ориентировано на императивную модель вычислений, задаваемую фон-неймановской архитектурой ЭВМ, существуют и другие подходы. Можно упомянуть языки со стековой вычислительной моделью (Forth, Factor, Postscript и др.), а также функциональное (Лисп, Haskell, ML и др.) и логическое программирование (Пролог) и язык Рефал, основанный на модели вычислений, введённой советским математиком А. А. Марковым-младшим.

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

Языки программирования могут быть реализованы как компилируемые и интерпретируемые.

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

Если программа написана на интерпретируемом языке, то интерпретатор непосредственно выполняет (интерпретирует) исходный текст без предварительного перевода. При этом программа остаётся на исходном языке и не может быть запущена без интерпретатора. Можно сказать, что процессор компьютера — это интерпретатор машинного кода.

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

Разделение на компилируемые и интерпретируемые языки является условным. Так, для любого традиционно компилируемого языка, как, например, Паскаль, можно написать интерпретатор. Кроме того, большинство современных «чистых» интерпретаторов не исполняют конструкции языка непосредственно, а компилируют их в некоторое высокоуровневое промежуточное представление (например, с разыменованием переменных и раскрытием макросов).

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

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

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

Однако интерпретируемые программы выполняются заметно медленнее, чем компилируемые, кроме того, они не могут выполняться без дополнительной программы-интерпретатора.

Некоторые языки, например, Java и C#, находятся между компилируемыми и интерпретируемыми. А именно, программа компилируется не в машинный язык, а в машинно-независимый код низкого уровня, байт-код. Далее байт-код выполняется виртуальной машиной. Для выполнения байт-кода обычно используется интерпретация, хотя отдельные его части для ускорения работы программы могут быть транслированы в машинный код непосредственно во время выполнения программы по технологии компиляции «на лету» (Just-in-time compilation, JIT). Для Java байт-код исполняется виртуальной машиной Java (Java Virtual Machine, JVM), для C# — Common Language Runtime.

Подобный подход в некотором смысле позволяет использовать плюсы как интерпретаторов, так и компиляторов. Следует упомянуть также язык Форт(Forth), имеющий и интерпретатор, и компилятор.

Используемые символы

Современные языки программирования рассчитаны на использование ASCII, то есть доступность всех графических символов ASCII является необходимым и достаточным условием для записи любых конструкций языка. Управляющие символы ASCII используются ограниченно: допускаются только возврат каретки CR, перевод строки LF и горизонтальная табуляция HT (иногда также вертикальная табуляция VT и переход к следующей странице FF).

Подробнее по этой теме см.: Переносимый набор символов.

Ранние языки, возникшие в эпоху 6-битных символов, использовали более ограниченный набор. Например, алфавит Фортрана включает 49 символов (включая пробел): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / () . , $ ' :

Заметным исключением является язык APL, в котором используется очень много специальных символов.

Использование символов за пределами ASCII (например, символов KOI8-R или символов Юникода) зависит от реализации: иногда они разрешаются только в комментариях и символьных/строковых константах, а иногда и в идентификаторах. В СССР существовали языки, где все ключевые слова писались русскими буквами, но большу́ю популярность подобные языки не завоевали (исключение составляет Встроенный язык программирования 1С:Предприятие).

Подробнее по этой теме см.: Русские языки программирования.

Расширение набора используемых символов сдерживается тем, что многие проекты по разработке программного обеспечения являются международными. Очень сложно было бы работать с кодом, где имена одних переменных записаны русскими буквами, других — арабскими, а третьих — китайскими иероглифами. Вместе с тем, для работы с текстовыми данными языки программирования нового поколения (Delphi 2006, C#, Java) поддерживают Unicode.

Классы языков программирования

Функциональные Процедурные (императивные) Стековые Векторные Аспектно-ориентированные Декларативные Динамические Учебные Описания интерфейсов Прототипные Объектно-ориентированные Рефлексивные Логические Параллельного программирования Скриптовые (сценарные) Эзотерические C русским синтаксисом

 

Основные языки программирования (список • сравнение • IDE • история • хронология)
Используемые в разработке Ада • АПЛ • Ассемблер • ActionScript • ABAP/4 • AutoIt • AWK • BASIC • C • Кобол • C++ • C# • ColdFusion • Common Lisp • D • dBase • Delphi • Eiffel • Erlang • F# • Forth • Фортран • Gambas • Groovy • Haskell • Icon • Java • JavaScript • Limbo • Lua • MATLAB • Object Pascal • Objective-C • OCaml • Oz • Оберон • Parser • Паскаль • Perl • PHP • PowerBASIC • PureBasic • Python • ПЛ/1 • Пролог • Ruby • Scala • Scheme • Smalltalk • SQL • PL/SQL • Tcl • Vala • Visual Basic • VB.NET
Академические Clean • Curry • Лого • ML • Модула-3 • Рефал • Симула
IEC61131-3 Instruction List • ST • FBD • Ladder Diagram • SFC
Прочие Алгол • Алгол 68 • Модула-2 • Miranda • Hope
Эзотерические HQ9+/HQ9++ • INTERCAL • Brainfuck • Befunge • Malbolge • Piet • Spoon • Unlambda • Whitespace • FALSE

Подкатегории

 

1. A 2. ABC (нотная запись) 3. B 4. BCPL 5. Bc 6. Befunge 7. Blitz BASIC 8. Brainfork 9. C 10. C/AL 11. CHILL 12. CLIPS 13. CODASYL 14. CPL (язык программирования) 15. Chapel (язык программирования) 16. Clarion (язык программирования) 17. ColdFusion 18. Coq 19. F 20. FALSE 21. FBD 22. Fjölnir 23. Fortress 24. FoxPro 25. FreeMat 26. FuzzyCLIPS 27. G 28. GPSS 29. H 30. HLSL 31. HPGL 32. HaXe 33. Hope (язык программирования) 34. I 35. IEC 61131-3 36. INTERCAL 37. Instruction List 38. J 39. JCL 40. JOVIAL 41. 42. K 43. KAELOC 44. L 45. Ladder Diagram 46. Linda 47. M 48. MC Sharp 49. MQL4 Программы 50. MUMPS 51. Malbolge 52. Microsoft Interface Definition Language 53. Microsoft Visual Programming Language 54. N 55. Noop 56. O 57. Occam 58. OpenGL Shading Language 59. P 60. PL/M 61. Perl Shell 62. Pike 63. Pixilang 64. PostScript 65. P′′ 66. R 67. REPL 68. REXX 69. RPG (язык программирования) 70. Roadsend PHP 71. S 72. S (язык программирования) 73. SASL (язык программирования) 74. Script.NET 75. Self 76. Sequential Function Chart 77. Structured Text 78. T 79. TTCN-3 80. V 81. Visual FoxPro 82. Void 83. W 84. WMLScript 85. X 86. XL (язык программирования) 87. Z 88. Zonnon 89. А 90. АПЛ (язык программирования) 91. Адресный язык программирования 92. Б 93. Бутстрэппинг (программирование) 94. В 95. Высокоуровневый язык программирования 96. Г 97. Грамматика ван Вейнгаардена 98. Графический язык программирования 99. Д 100. Двухуровневая грамматика 101. Декларативный язык программирования 102. Диалект (программирование) 103. Динамический язык программирования 104. И 105. История языков программирования 106. К 107. Квалификаторы типа 108. Командная оболочка UNIX 109. Компилируемый язык программирования 110. Компонентный Паскаль 111. Конкатенативный язык программирования 112. Контекстно-зависимая грамматика 113. Контекстно-свободная грамматика 114. КуМир (система программирования) 115. Л 116. Лого (язык программирования) 117. М 118. Макроязык 119. Миранда (язык программирования) 120. Н 121. Низкоуровневый язык программирования 122. О 123. Оберон (язык программирования) 124. П 125. ПЛ/1 126. Планкалкюль 127. Предметно-ориентированный язык программирования 128. Р 129. Рапира (язык программирования) 130. Робик (язык программирования) 131. С 132. Сверхвысокоуровневый язык программирования 133. Семейство языков SC 134. Сетл 135. Сильнотипизированный язык программирования 136. Снобол 137. Сравнение C Sharp и Java 138. Стековый язык 139. Строгая типизация 140. У 141. Учебный язык программирования 142. Я 143. Язык ассемблера 144. Языки программирования c ключевыми словами не на английском

 



Поделиться:

Дата добавления: 2015-08-05; просмотров: 86; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты