计算机和控制流程

“计算机之父”冯·诺依曼是20世纪最重要的数学家之一,现代计算机、博弈论、核武器和生化武器等领域的科学全才,他在设计制造第一个电子计算机时提出了“冯·诺依曼”结构。

一、冯·诺依曼结构

“冯·诺依曼”结构

计算机硬件有五大部分

  • 运算器:进行算术和逻辑运算;
  • 控制器:控制计算机持续协调运行;
  • 存储器:存储数据和程序;
  • 输入设备:从计算机外部获取数据;
  • 输出设备:将计算结果反馈给外界。

基本步骤

  1. 控制器从存储器中取出程序语句和额外数据;
  2. 数据齐全的语句交给运算器进行算术或者逻辑运算;
  3. 3运算结果再存回存储器;
  4. 控制器确定下一条程序语句,回到步骤1继续。

二、编程语言的发展

  1. 非结构化语言:编号或标签,GOTO,子程序可以有多个入口和出口;有分支,循环;
  2. 结构化语言:任何基本结构只允许是唯一入口和出口,有顺序、分支、循环,废弃GOTO。例如C语言:
  3. 面向对象语言:更加接近人类认知世界的方式,万事万物抽象成对象,对象间关系抽象成类和继承;有了封装、继承、多态;

静态语言:包含了很多计算机的底层细节,没有学过这些语言还是难以看懂,C语言也是静态语言。

例如C++:C++和C看起来很相似,但是特性完全不同
Java和C#是C和C++的接班人,解决了缺点但是代码冗杂、写起来诸多限制

动态语言:不需要在使用变量前进行声明,这些语言允许你使用更少的代码做更多的事。

许多年来,Perl一直是一门万能的动态语言,但是它的语法非常难用
PHP在web开发领域非常流行
最后就是我们的Python了

还有一种函数式语言,是古老的编程范式,应用在数学计算、并行处理的场景;函数是“一等公民”。Python在后面会经常用到函数,这在之后会讲到。

基本计算

基本计算语句

  1. Python语言的赋值语句很好地对应了“运算”和“存储”;
  2. 赋值语句的执行语义为:计算表达式的值,存储起来,贴上变量标签以便将来引用。与计算机运行过程中的“计算”和“存储”相对应;
  3. “控制器确定下一条程序语句”即对应“控制”。
  4. 在计算机运行过程中,“下一条语句”决定了计算机是能够自动调整、自动反复操作,还是只能像计算器那样一步接着一步计算。这种决定“下一条语句”的机制,在程序设计语言中称作“控制流程”

位运算符

二进制中,常用的位运算符有:&(与)、|(或)、~(取反)、^(异或)、<<(左移)、>>(右移),“与”就相当于乘,“或”相当于加(都是0相加为0,有1就是1),32//4相当于32>>2(在二进制中右移2位)

  1. 原码:5->0b101,1->0b1,-1->-0b1;
  2. 反码:正数的反码与原码相同,负数的反码符号位不变,其余按位取反;
  3. 补码:正数的补码与原码相同,负数的补码符号位不变,其余按位取反后+1,补码的补码是原码;
  4. 负数表示法:负数在计算机中使用补码存储,-1的补码为1111 1111;(5-1)->5+(-1),直觉上是0b101-0b1,其实计算机中是0b101+0b11111111,溢出位舍弃。

例:~12为什么是-13?

00001100 -> 11110011(此时是负数,除了第一位1是表示负号不变,其余位+1) -> 10001101 -> -13

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注