Разница между машинным языком, двоичным кодом и двоичным файлом

Я изучаю программирование, и во многих источниках я вижу понятия: "машинный язык", "двоичный код" и "двоичный файл". Различие между этими тремя понятиями для меня неясно, потому что, согласно моему пониманию, машинный язык означает сырой язык, который компьютер может понять, т. е. последовательности 0 и 1.

теперь, если машинный язык является последовательностью 0s и 1s, а двоичный код также является последовательностью 0s и 1s, то делает машинный язык = двоичный код?

Как насчет двоичного файла? Что такое двоичный файл? Для меня слово "двоичный файл" означает файл, который состоит из двоичного кода. Так, например, если мой файл:

010010101010010
010010100110100
010101100111010
010101010101011
010101010100101
010101010010111

будет ли это двоичный файл? Если я google двоичный файл и вижу Википедия Я вижу этот пример изображения двоичного файла, который смущает меня (это не в двоичном?....)

Hex image

где происходит мое замешательство? Я смешиваю кодировку файла здесь или как? Если бы я попросил показать мне, что такое машинный язык, двоичный код и двоичный файл, что бы это было? = ) Я думаю, что различие слишком абстрактно для меня.

Thnx для любой помощи! =)

обновление:

в Python, например, есть одна фраза в файле ввода/вывода учебник, которого я не понимаю:открывает файл для чтения только в двоичном формате. что делает чтение файла в двоичном формате в смысле?

4 ответов


машинный код и двоичный код одинаковы-система счисления с базой 2 - либо 1, либо 0. но машинный код также может быть выражено в hex-формате (шестнадцатеричный) - система счисления с основанием 16. Двоичная система и hex очень взаимосвязаны друг с другом, его легко конвертировать из двоичного в шестнадцатеричный и конвертировать обратно из шестнадцатеричного в двоичный. И потому, что hex гораздо более удобочитаем и полезен, чем binary - он часто используется и отображается. Например, на рисунке выше в ваш вопрос -использует hex-чисел!

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

 1001 1110 0000 1010 => 9  14 0 10 which in hex becomes: 9E0A. 

можно согласиться, что 9E0A гораздо более читаем, чем двоичный, а шестнадцатеричный - это то, что вы видите на изображении.


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

вы, ребята, все говорите: "машинный код-это куча чисел".

конечно, " код "- это куча чисел, но люди задаются вопросом (я предполагаю): "что на самом деле происходит физически?"

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

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

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

Так для 010101, 3 строба напряжения тока закрыты (0's), 3 открыты (1's)

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

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

Итак, я думаю, давайте сломаем его вниз?

X-Bit-процессоры говорят, сколько битов процессор может обрабатывать одновременно.

бит либо 1, либо 0, " вкл "или" выкл"," открыть "или"закрыть"

Так 32-битные процессоры обрабатывают "10101010 10101010 10101010 10101010" - это сразу много бит.

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

в любом случае, транзистор-это переключатель, поэтому, если он получает 1, Он посылает ток в одном направлении, или если он получает 0, он будет посылать ток в другом направлении... (или что-то в этом роде)

поэтому я представляю, что как машинный код идет... сегмент кода, который получает процессор, изменяет каналы напряжения таким образом, что посылает сигнал на другую часть компьютера (почему вы думаете, что процессоры имеют так много контактов?), вероятно, еще одна интегральная схема, более специализированная для конкретной задачи. Эта интегральная схема затем получает кусок кода, скажем, от 2 до 4 бит 01 или 1100 или что-то еще, что дополнительно определяет, где будет конечный пункт назначения сигнала, который может быть прямо обратно к процессору или, возможно, к некоторому выходному устройству.

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

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

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

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

поэтому мне интересно, как программа "Программа" или "заставить" компьютер "что-то делать"... Скорее, как компилятор компилирует программу кода, отличного от двоичного? Трудно думать об этом сейчас, потому что я очень устал (поэтому я не буду пытаться) , но также и потому, что все, что вы делаете на компьютере, из-за некоторые программы. В диспетчере задач активно работают программы (процессы). Они заставляют экран вашего компьютера выглядеть так, как вы привыкли, а также позволяют управлять экраном, как если бы изображения на экране были реальными объектами. (Это не так, это просто картинки, даже курсор мыши) (Хорошо, я закончил. хватит редактировать и удлинять мои мысли, пора спать)

кроме того, я действительно не понимаю, как 0 "читаются" компьютером. Кажется что "0" не должно быть "отсутствием напряжения", скорее, это должен быть какой-то другой тип сигнала Где, возможно, что-то вроде 1 вольта = 1 и 0,5 вольта = 0. Некоторая различимая разница между токами в цепи, которая все равно будет посылать сигнал, но может быть разницей между Открытием и закрытием определенной цепи.

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

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


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

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

ваша программа запускается в определенном месте в вашей памяти и читает первую число...

Итак, вот поворот: эти цифры могут быть инструкциями или данными. Ваш процессор считывает эти числа и интерпретирует их как инструкции

пример: начальный адрес 0

в 0-это инструкция типа " прочитать значение из адреса 120 в ALU (Math-Unit)

затем он переходит к адресу 1

"считывание значения из адреса 121 в ALU"

затем он переходит к адресу 2

"вычитание чисел в ALU"

затем он переходит к адресу 3

"Если значение ALU меньше нуля, перейдите по адресу 10"

Он не меньше нуля, поэтому он обращается к 4

"перейти по адресу 20"

вы видите, что это базовый if (a

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

добавить 10, 11, 20 / / загрузить var с адреса 10 и 11; запустить добавление и сохранить в адрес 20

В Заключение:

ассемблер (инструкции процессора) можно назвать двоичным, потому что он хранится в простых числах

но все остальное также может быть двоичным файлом.

в реальности, если у вас простой .EXE-файл это... Если у вас есть переменные, такие как a = 10 и b = 20, эти значения могут быть сохранены некоторые где между предложениями if и циклами for... Это зависит от компилятора, куда он поместил эти

но если у вас сложная 3D-модель, ее можно сохранить в отдельном файле без исполняемого кода...

надеюсь, это поможет немного прояснить ситуацию.


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

двоичный код в основном любая информация, представленная последовательность 1s и 0s.

A двоичный файл любой не-текстовый файл; например,.exe, a .png, etc.