机器语言,二进制代码和二进制文件之间的区别

jje*_*omi 20 binary encoding

我正在学习编程,在很多方面我都看到了概念:"机器语言","二进制代码"和"二进制文件".我不清楚这三者之间的区别,因为根据我的理解,机器语言是指计算机可以理解的原始语言,即0和1的序列.

现在,如果机器语言是0和1的序列,二进制代码也是0和1的序列,那么机器语言=二进制代码

二进制文件怎么样?什么是二进制文件?对我来说,"二进制文件"这个词意味着一个由二进制代码组成的文件.例如,如果我的文件是:

010010101010010
010010100110100
010101100111010
010101010101011
010101010100101
010101010010111
Run Code Online (Sandbox Code Playgroud)

这是一个二进制文件吗?如果我谷歌二进制文件,看到维基百科,我看到这个二进制文件的示例图片混淆了我(它不是二进制文件?....)

十六进制图像

我的困惑在哪里发生?我在这里混合文件编码还是什么?如果我要问一个人给我看什么是机器语言,二进制代码和二进制文件,它们会是什么?=)我猜这种区别对我来说太抽象了.

Thnx任何帮助!=)

更新:

例如,在Python中,文件I/O 教程中有一个短语,我不明白:打开一个文件只能以二进制格式读取.以二进制格式读取文件意味着什么?

Bjö*_*röm 20

机器代码和二进制是相同的 - 具有基数2的数字系统 - 1或0. 但是机器代码也可以用十六进制格式(十六进制)表示 - 具有基数16的数字系统.二进制系统和十六进制是非常相互关联的,它很容易从二进制转换为十六进制,并从十六进制转换回二进制.而且因为hex比二进制更易读和有用 - 它经常被使用和显示.例如,在您的问题上面的图片中 - 十六进制数!

假设您有二进制序列1001111000001010 - 它可以通过按块分组轻松转换为十六进制 - 每个块由四位组成.

 1001 1110 0000 1010 => 9  14 0 10 which in hex becomes: 9E0A. 
Run Code Online (Sandbox Code Playgroud)

人们可以同意9E0A比二进制文件更具可读性 - 而十六进制是你在图像中看到的.

  • 现代计算机是用十六进制还是二进制编写的,还是它们与其他计算机的组合? (2认同)

Vir*_*ity 8

老实说,我很惊讶没有看到我正在寻找的信息,回过头来看,我想这个主题的标题并不完全适合OP提出的问题.

你们都说"机器码是一堆数字".

当然,"CODE"是一堆数字,但人们想知道(我猜)是"实际发生了什么?"

在编程方面,我是一个相当新手,但我理解足以对"粗略"回答这个问题充满信心.

与实际电路不同的机器代码不是数字或值.机器代码是一堆打开或关闭的电压门,根据它们连接的内容,某些灯会在特定时间闪烁等.

我猜测"机器代码"决定了特定电信号的路径和时间,这些信号将传输到达其整个目的地.

因此对于010101,3个电压门关闭(0),3个打开(1个)

我知道我在这里接近正确的答案,但我也知道它更复杂 - 因为我可以想象我不知道的那些.

010101对于简单的电路来说是简单的指令,但我无法理解的是复杂的计算机如何处理所有信息.

所以我想让我们分解一下吧?

x-Bit处理器告诉处理器一次可以处理多少位.

一位是1或0,"开"或"关","打开"或"关闭"

所以32位处理器处理"10101010 10101010 10101010 10101010" - 一次这么多位.

处理器是"集成电路",其类似于紧凑的电路板,包含电阻器/电容器/晶体管和一些存储器.我不确定处理器是否有电阻器,但我知道你通常会发现它们位于电路板上的实际处理器周围

无论如何,晶体管是一个开关,所以如果它接收1,它会在一个方向发送电流,或者如果它接收到0,它将以不同的方向发送电流......(或类似的东西)

所以我想,随着机器代码的进行......处理器接收到的代码段改变了电压通道,使得它向计算机的另一部分发送信号(为什么你认为处理器有这么多引脚?),可能是另一个更专门针对特定任务的集成电路.然后,该集成电路接收一块代码,比如2到4位01或1100或者其他东西,这进一步定义了信号的最终目的地将在哪里结束,这可能是直接返回处理器,或者可能是某些输出设备.

机器码是一种非常有效的方式来获取电路并将其连接到灯泡,然后将该灯泡从电路中取出并将电路切换到不同的灯泡

计算机中的内存非常必要,因为除非让计算机做任何事情,否则您需要输入所有内容(在机器代码中).相反,所有的1和0都存储在一些存储设备中,或者是带有磁头引脚的旋转硬盘,根据磁盘的电荷"读取"1或0,或者使用一系列闪存设备的闪存设备晶体管,通过引发1和0来发送电压(我不完全清楚闪存是如何工作的)

幸运的是,有人花时间想出一个不同的基本编号系统进行编程(十六进制),以及一种将这些数字(翻译它们)转换回二进制的方法.然后所有软件程序都从那里扩展出来.

键盘上的每个键都会创建一个二进制的特定信号,转换为使用特定电压打开或关闭的一堆开关,这样可以通过屏幕上创建"1"或"0"的特定单个像素运行电流"或"F",或该帖子的所有字符.

所以我想知道,程序"程序"或"使"计算机"做"某些事情是怎样的呢?相反,编译器如何编译不同于二进制的代码程序?现在很难想,因为我非常疲倦(所以我不会尝试),但也因为你在计算机上做的一切是因为某些程序.任务管理器中有正在运行的程序(进程).这些可以使您的计算机屏幕看起来像您已习惯的方式,并且还允许操作屏幕,就好像说屏幕上的图片是真实的对象一样.(它们不是,它们只是图片,甚至是你的鼠标光标)(好吧我已经完成了.足够的编辑和延长我的想法,是时候睡觉了)

另外,我真正得到的是计算机如何"读取"0.似乎'0'不能是'缺电压',而是必须是其他类型的信号,其中可能是1伏特= 1,0.5伏特= 0.电路中电流之间存在一些明显差异仍会发送信号,但可能是打开和关闭特定电路之间的差异.

如果我对世界各地的计算机工程师有任何严肃的道具,那么复杂程度令人垂涎欲滴.我希望有一天能够了解有关技术的一切.现在我只是想通过arduino.

最后......我想知道的事情......甚至可以在不使用另一台计算机的情况下对今天的计算机进行编程?


小智 6

你必须了解计算机的基本原理是如何工作的,这将为你理清思路......因此我建议阅读诸如诺伊曼架构之类的东西

基本上,在一台非常简单的计算机中,您只有一个存储器,例如一个数组,其中包含处理器的指令,数据和所有内容都是二进制数。

你的程序从你内存中的某个位置开始并读取第一个数字......

因此,问题来了:这些数字可以是指令,也可以是数据。您的处理器读取这些数字并将它们解释为指令

示例:起始地址为0

0 中的指令类似于“将地址 120 中的值读入 ALU(数学单元)”

然后它步骤到地址1

“将地址 121 的值读入 ALU”

然后它步骤解决2

“ALU 中的数字相减”

然后它步骤解决3

“如果 ALU 值小于零,则转到地址 10”

它不小于零,因此它会步进到地址 4

“转到地址 20”

你会发现这是一个基本的 if(a < b)

您可以将这些指令写为数字,它们可以由您的处理器运行,但因为没有人愿意做这项工作(这就是他们在 60 年代用打孔卡所做的事情),所以发明了汇编器......看起来像:

add 10 ,11, 20 // 从地址 10 和 11 加载 var; 运行加法并存储到地址 20

综上所述:

汇编器(处理器指令)可以称为二进制,因为它以普通数字存储

但其他所有内容也可以是二进制文件。

实际上,如果您有一个简单的 .exe 文件,那么两者都是...如果其中有像 a = 10 和 b = 20 这样的变量,这些值可以存储在 if 子句和 for 循环之间的某个位置...这取决于编译器把这些放在哪里

但是,如果您有一个复杂的 3D 模型,它可以存储在一个单独的文件中,其中没有可执行代码......

我希望它有助于澄清一些事情。


The*_*Hat 6

机器语言是一种低级编程语言,通常完全由数字组成。因为它们只是数字,所以可以用二进制、八进制、十进制、十六进制或任何其他方式查看它们。Dave4723 在他的回答中给出了更彻底的解释。

二进制代码基本上是由1 和 0 序列表示的任何信息。

一个二进制文件是任何非文本文件; 例如 an .exe, a.png等。