计算机原理杂记

时间:2022-02-12 11:28:00

计算机原理杂记

1. 进制

10进制,16进制如何转化为2进制,很容易,不讲。这里要说的是他们的意义:

  1. 10进制是人类计数语言,计算机不认识
  2. 2进制是计算机语言,人类不认识(位数太长,容易数错,不方便读写和计算)
  3. 16进制是为了使人类方便读写2进制而广泛应用的(如\x01表示一个字节00000001;有多少个\x**就有多少个字节,如\x42\x4d\x38\x8c表示4个字节)

2. 大小端

大小端指的是每个存储单元在内存中内部字节的存放顺序的不同。(注意:不是存储单元在内存中的存储顺序) 计算机原理杂记

总结:两正一反 和 大端是一致的(大端是正序)

  1. 在大小端中,变量(如:a,b,c,d)在内存中的存放顺序没变(都是正序)
  2. 在大小端中,变量的每个字节的内部二进制(如:大端中第一行第四个字节为\x01,小端中第一行第一个字节也为\x01)顺序没变(都是正序)
  3. 在大小端中,变量的内部字节的存放反了(大端是正序,小端是逆序)(如变量a在大端中为:\x00\x00\x00\x01,在小端中为:\x01\x00\x00\x00)

记忆法:(有需要再看)

  1. 大端,又叫高尾端,即尾巴在高位,对于a=\x00\x00\x00\x01,来说\x01就是尾巴,所以\x01在高位,所以字符串顺序与存储顺序一致
  2. 小端,又叫低尾端,反之。

参考:轻松记住大端小端的含义(附对大端和小端的解释)

3. 编译型语言和解释型语言

粗略的感官分析:

  1. 我们把程序运行内存分为“数据结构区”和“执行区”;
  2. 编译型语言在执行时,先把所有的对象或函数等装入数据结构区,然后从数据结构区中找到开始执行点放入执行区执行;
  3. 解释型语言在执行时,直接依次加载每一行代码到执行区执行,如果遇到对象或函数等就放到数据结构区留着以后使用。

4. 函数式编程

最大的特点:函数可以作为变量或参数被赋值或传递

闭包:我们可以动态的构建或生成函数体

我们来实现一个可变参数的求和。通常情况下,求和的函数是这样定义的:

def calc_sum(*args):
ax = 0
for n in args:
ax = ax + n
return ax

可以不返回求和的结果,而是返回求和的函数:

def lazy_sum(*args):
def sum():
ax = 0
for n in args:
ax = ax + n
return ax
return sum

在这个例子中,我们在函数lazy_sum中又定义了函数sum,并且,内部函数sum可以引用外部函数lazy_sum的参数和局部变量,当lazy_sum返回函数sum时,相关参数和变量都保存在返回的函数中,这种称为“闭包(Closure)”的程序结构拥有极大的威力。

参考:http://www.liaoxuefeng.com/wiki/001431608...