我正在学习编程,在很多方面我都看到了概念:“机器语言”,“二进制代码”和“二进制文件”。我不清楚这三者之间的区别,因为根据我的理解,机器语言是指计算机可以理解的原始语言,即0和1的序列。
现在如果机器语言是0和1的序列,而二进制代码也是0和1的序列,那么机器语言=二进制代码?
二进制文件怎么样?什么是二进制文件?对我来说,“二进制文件”这个词意味着一个由二进制代码组成的文件。例如,如果我的文件是:
010010101010010
010010100110100
010101100111010
010101010101011
010101010100101
010101010010111
这是一个二进制文件吗?如果我谷歌二进制文件并看到Wikipedia我看到这个二进制文件的示例图片让我困惑(它不是二进制文件?....)
我的混乱发生在哪里?我在这里混合文件编码还是什么?如果我要问一个人给我看什么是机器语言,二进制代码和二进制文件,它们会是什么? =)我猜这种区别对我来说太抽象了。
Thnx任何帮助! =)
更新:
例如,在Python中,文件I / O tutorial中有一个短语,我不明白:打开一个文件只能以二进制格式读取。什么以二进制格式读取文件意味着什么?
答案 0 :(得分:19)
机器代码和二进制文件是相同的 - 带有基数2的数字系统 - 1或0. 但机器代码也可以用十六进制格式表示(十六进制) - a基数为16的数字系统。二进制系统和十六进制是非常相互关联的,它很容易从二进制转换为十六进制,并从十六进制转换回二进制。而且因为hex比二进制更易读和有用 - 它经常被使用和显示。例如,在您的问题上面的图片中 - 使用十六进制数字!
假设您有二进制序列1001111000001010 - 它可以通过按块分组轻松转换为十六进制 - 每个块由四位组成。
1001 1110 0000 1010 => 9 14 0 10 which in hex becomes: 9E0A.
人们可以同意9E0A比二进制更易读 - 而十六进制就是你在图像中看到的。
答案 1 :(得分:7)
我真的很惊讶没有看到我想要的信息,回过头来看,我想这个帖子的标题并不完全适合OP提出的问题。
你们都说"机器码是一堆数字"。
当然,"代码"是一堆数字,但是人们想知道的是什么(我在猜测)是"实际发生了什么?"
在编程方面,我是一个相当新手的人,但我理解得足够自信,大致相信'回答这个问题。
对于实际电路,机器代码不是数字或值。 机器代码是一堆打开或关闭的电压门,根据它们连接的内容,某些灯会在特定时间闪烁等。
我猜测"机器代码"指示将到达其整个目的地的特定电信号的路径和时间。
因此对于010101,3个电压门关闭(0' s),3个电压门打开(1' s)
我知道我在这里接近正确的答案,但我也知道它更为复杂 - 因为我可以想象我不知道的事情。
对于一个简单的电路来说,010101将是简单的指令,但我无法理解的是复杂的计算机如何处理所有信息。所以我想让它分解?
x-Bit-processors告诉处理器一次可以处理多少位。
一位是1或0,"开"或"关","打开"或"已关闭"
所以32位处理器进程" 10101010 10101010 10101010 10101010" - 一次这么多位。
处理器是一个集成电路",它就像一个紧凑的电路板,包含电阻/电容/晶体管和一些存储器。我不确定处理器是否有电阻器,但我知道你通常会在电路板上的实际处理器周围找到大量的电阻器
无论如何,晶体管是一个开关,所以如果它接收到1,它会向一个方向发送电流,或者如果它接收到0,它将向不同的方向发送电流......(或类似的东西) )
所以我想,随着机器代码的进行......处理器接收到的代码段改变了电压通道,使得它向计算机的另一部分发送信号(为什么你认为处理器有这么多引脚?),可能是另一个更专门针对特定任务的集成电路。 然后该集成电路接收一块代码,比如说2到4位01或1100或者其他东西,这进一步定义了信号的最终目的地将在哪里结束,这可能是直接返回处理器,或者可能是一些输出设备。
机器码是一种非常有效的方式来获取电路并将其连接到灯泡,然后将该灯泡从电路中取出并将电路切换到不同的灯泡
计算机中的内存非常必要,因为要让计算机执行任何操作,您需要输入所有内容(在机器代码中)。相反,所有的1和0都存储在一些存储设备中,或者是带有磁头引脚的旋转硬盘,它可以读取'基于磁盘电荷的1或0或使用一系列晶体管的闪存器件,其中通过引发1和0来发送电压(I& s& s) #39;我不完全了解闪存的工作原理)
幸运的是,有人花时间想出一个不同的编号基数系统(十六进制),以及一种将这些数字(翻译它们)转换回二进制数的方法。然后所有软件程序都从那里扩展开来。
键盘上的每个键都会创建一个二进制的特定信号,转换为 使用特定电压打开或关闭一堆开关,以便可以通过屏幕上的特定单个像素运行电流,从而创建" 1"或" 0"或者" F",或者这篇文章的所有人物。
所以我想知道,一个节目'节目'或者'制作'电脑'做' ...而是,编译器如何编译与二进制不同的代码程序? 现在很难想,因为我非常疲倦(所以我不会尝试)但是因为你在电脑上做的一切都是因为某些程序。 任务管理器中有正在运行的程序(进程)。这些使您的计算机屏幕看起来已经习以为常,并且还允许对屏幕进行操作,就好像说屏幕上的图片是真实的对象一样。 (他们不是,他们只是图片,甚至是你的鼠标光标) (好吧,我已经完成了。足够的编辑和扩展我的想法,它是时候睡觉了)
另外,我真正得到的不仅仅是0''''通过电脑。 似乎是一个' 0' 0不能是缺乏电压,而必须是其他类型的信号 其中可能是1伏特= 1,0.5伏特= 0。电路中仍然会发送信号的电流之间存在一些明显差异,但可能是打开和关闭特定电路之间的差异。
如果我对这个世界的计算机工程师有任何严肃的道具,那么复杂程度令人垂涎欲滴。我希望有一天能够了解有关技术的一切。现在我只是试图通过arduino。
最后......我一直在想的......甚至可以在不使用其他电脑的情况下对今天的电脑进行编程吗?
答案 2 :(得分:4)
您必须了解计算机的基本原理如何运作,这将为您解决问题...因此,我建议您阅读Neumann Architecture
之类的内容基本上在一台非常简单的计算机中,你只有一个像数组一样的内存 它包含处理器的说明,数据和所有内容都是二进制数字。
你的程序从你记忆中的某个地方开始并读取第一个数字......
所以这就是扭曲:这些数字可以是指令或数据。 您的处理器读取这些数字并将其解释为指令
示例:起始地址为0
在0中的指令类似于“从地址120读取值到ALU(数学单元)
”然后它步骤解决1
“从地址121读取值到ALU”
然后步骤解决2
“减去ALU中的数字”
然后它步骤解决3
“如果ALU值小于零,请转到地址10”
它不小于零,所以它逐步解决4
“转到地址20”
你知道这是一个基本的if(a< b)
您可以将这些说明写为数字,它们可以由您的处理器运行,但因为没有人愿意做这项工作(这就是他们在60年代用穿孔卡做的事情) 汇编程序被发明了...... 看起来像是:
从地址10和11添加10,11,20 //加载变量;运行添加并存储到地址20
结论:
汇编程序(处理程序指令)可以称为二进制,因为它以普通数字存储
但其他一切也可以是二进制文件。
实际上,如果你有一个简单的.exe文件,它就是......如果你有变量,比如a = 10和b = 20,那么这些值可以存储在if子句和for循环之间的某些位置......这取决于编译器放置这些
的位置但是如果你有一个复杂的3D模型,它可以存储在一个单独的文件中,里面没有可执行代码......
我希望稍微澄清一下。
答案 3 :(得分:3)
计算机语言是低级编程语言,通常完全由数字组成。因为它们只是数字,所以可以用二进制,八进制,十进制,十六进制或任何其他方式查看它们。 Dave4723在他的回答中做了更彻底的解释。
二进制代码基本上是由 1s和0s序列表示的任何信息。
二进制文件是任何非文本文件;例如.exe
,.png
等