猿问

php程序员学c遇到的一些疑问

1.php有zend引擎去编译php,那c呢?是操作系统在编译他吗?2.很多年以前就知道计算机只认识01代码,但今天脑袋瓜就想,计算机的那一部分只认识01,我理解的是cpu只认识01对吗?3.c和操作系统的关系是什么?比如我在windows下用c编译的东西能在linux下用吗,我感觉是不行的,那是不是我同样的代码,要想在linux用的话,那就必须copy一份到linux下在编译。4,我发现曾经用过很多东西,感觉真的是在用人家的东西,不管学js也好php也好,html,人家到底底层咋实层的,他和计算机整个的更深一层是怎么交互的,完全不知道啊。学起c来感觉自己更像一个菜鸟。
真是个菜鸟,问了很多小白的问题,但我真的是不知道。先谢谢segmentfault的朋友了。
开心每一天1111
浏览 383回答 2
2回答

皈依舞

你问了很多计算机体系结构的事情,其实学习c语言也不需要知道这么多,但是你是一个有好奇心的人,且逻辑思维也算清楚。01这东西不是软件关心的,是硬件关心,在数字逻辑中,我们称其为高低电平,电流经过一个元器件,如果电压为高电压记为0,低电压记为1。将一个逻辑经过运算之后,结合元器件的特性,我们就可以通过元器件的组合来将这个逻辑运算表达出来。刚开始肯定是简单的二极管之类的,发展到现在就是你看到的cpu了,里面的晶体管小到可以用纳米计算。计算机中的计算任务最终交给cpu,当然上层操作系统上的一个随随便便的命令,cpu是不认识的,你在操作系统中的一个命令要被拆分成若干指令,而每个指令去实现的时候又被分配到不同的电路单元中进行处理。这些指令的处理过程在电路中其实是一连串的01运算。这些指令(全部由二进制代码组成)就是传说中的机器码,由于机器码对于人来说阅读太困难,所以前辈们将其转成了汇编语言,汇编语言的开发速度和学习成本还是不理想,所以才有了高级语言的诞生。c语言其实最终还是要转化成机器码。比如说inta=1;在编译是,要被先翻译成好几句汇编,然后这些汇编再转成机器码。所以,说白了编译就是将c变成汇编再变成机器码的过程,编译之后生成的可执行程序又可以愉快的向cpu发指令了。跟c语言不通,php是解析型语言,他不需要直接编译成可执行程序,他的代码使用zend引擎来做解析。zend引擎可以理解为一个可执行程序,当他通过词法、语法解析知道你要干什么后,就直接调用程序内置的一个函数交给你一个处理结果。至于你说的linux程序和windows程序不兼容的问题,是因为这操作系统生成可执行程序的二进制格式不一样,操作系统根本就彼此不识别。c语言的学习关键是理解语法,先学会使用,推荐看《c专家编程》、《c和指针》
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答