use*_*746 7 binary computer-science binaryfiles binary-data computer-architecture
我知道计算机如何将数字转换为二进制.但我不明白的是,我听说计算机将所有内容(文字,说明,......)翻译成二进制文件,而不仅仅是数字.这怎么可能?
你能告诉我一些例子吗?就像计算机如何将字母"A"翻译成二进制文件一样?
当计算机看到二进制代码时,他们如何知道0和1的长字符串是表示数字还是单词或指令?
.
例:
假设计算机程序员编码字母"Z",以便将其转换为此二进制字符串:11011001111011010111
因此,当计算机遇到这个二进制字符串时,它会将其转换为字母"Z".
但是当我们问这台电脑"到1259年709的产品是什么?"时会发生什么?
电脑会回答我们"892631".但是,当转换为二进制时,该数字是11011001111011010111.
那么它如何在"Z"和"892631"之间产生影响呢?
.
请注意,我对计算机科学知之甚少,所以请用简单的术语解释一切.
计算机实际上并没有将任何东西翻译成二进制文件,它从一开始就是二进制文件,而计算机从不知道二进制以外的任何东西.
A存储在内存中的字符将是01000001,并且计算机不会将其视为除二进制数之外的任何内容.当我们要求计算机将该数字显示为屏幕上的字符时,它将在字体定义中查找它的图形表示,以找到要发送到屏幕硬件的其他二进制数字.
例如,如果计算机是8位Atari,它会找到八个二进制值来表示A屏幕上的字符:
00000000
00011000
00111100
01100110
01100110
01111110
01100110
00000000
Run Code Online (Sandbox Code Playgroud)
如您所见,当图形硬件将其绘制在屏幕上时,二进制值将转换为暗和亮像素.
类似地,无论我们对计算机中的数字做什么,它都可以移动二进制值,对二进制值进行计算,并将它们转换为其他二进制值.
例如,如果您获取字符代码A并希望将其显示为十进制数,则计算机将计算出数字的十进制表示形式为数字6(110)和5(101),将其转换为字符6(00110110)和character 5(00110101),然后将它们转换为图形表示.
这是一个很好的问题,需要几年的时间才能完全解释几个博士.我可以为您提供一个简单的答案,但要完全理解您将需要做更多的研究.我可以在这里建议麻省理工学院的一些免费在线课程.
在最低级别,字母A和数字65实际上使用相同的0和1序列存储.1000001,如果我没有记错的话.
然后计算机决定从内存中抓取它时的内容.这意味着字母可以显示为数字,反之亦然.
计算机知道它正在寻找什么的方式是程序员告诉它它在寻找什么.程序员说我想要一个存储在这样一个位置的号码,然后计算机就会查找它.
让我们提升一个级别,因为很少有程序在这么低的级别上编程.其他程序(通常编译器采用像C++这样的代码并将其转换为计算机可以理解的东西)确保我们访问的位置实际上就是我们所说的.它们有额外的信息告诉他们这个1和0的特定集合实际上是一个浮点类型(有一个小数点),而这个集合是整数(没有小数点)
然后,其他类型构建在这些类型,更大的整数或浮点或字符串上,并且编译器再次强制执行这些类型.
这是一个过于简单化,我意识到这里的一切都不完全正确,但它会让你走上正确的道路.您可以查看其中一些主题以获得更好的主意:
http://en.wikipedia.org/wiki/Computer_data_storage
http://en.wikipedia.org/wiki/Reference_(computer_science)
希望这能把事情搞清楚一点.随意要求澄清!
So how would it make a difference between "Z" and "892631"?
它没有.对于计算机,一切都是0和1.他们的原始位没有任何意义,直到处理器TOLD如何处理那些0和1!
例如,我可以创建一个变量x并使其值0b01000001(0b表示"这是我在二进制中描述的数字").然后我可以让处理器x为我打印变量到屏幕.但我首先必须告诉处理器x是什么!
printf("%d", x); // this prints the decimal number 65
printf("%c", x); // this prints the character A
Run Code Online (Sandbox Code Playgroud)
因此x除了原始位之外,本身并不意味着什么01000001.但作为程序员,告诉计算机x真正的意义是我的工作.