📄 bianchenzhenyan.txt
字号:
取值规则:当p和q均为假时为假,否则为真
所以它有如下形式
以上这种形式为P∨q的同或形式
它的真值表还有一种情形
这种形式为P∨q的异或形式,通常用p⊕q来表示
p∧q为命题p和q的合取,是p和q用逻辑连接词’且’连起来的结果
取值规则:当p和q都为真时为真,否则为假
所以它有如下形式
p->q为命题p到q的蕴含,所以它是一种有顺序的连接形式
因为p->q是概念上’有p则有q’的这样一种逻辑形式,因此仅当”有p而没有q”时它为假
所以它的取值规则为:当p为真而q为假时蕴含为假,否则为真
P Q P∨q
真 假 真
假 真 真
真 真 真
假 假 假
P Q P∨q
真 假 真
假 真 真
真 真 假
假 假 假
P Q p∧q
真 假 假
假 真 假
真 真 真
假 假 假
编程新手真言 - GameRes.com 页码,19/101
mhtml:file://F:\Cpp\编程新手真言.mht 2008-7-30
如何理解当p为假,q不论取什么值蕴含都会为真呢?
这可把它理解为一种契约,p是义务,q是权利,只有当p得到成立,q才能得到成立,换言之,当p不成立,它并不影
响q(假设部分为假对整个蕴含的真值没有影响 - 此时蕴含一律为真)
p->q可理解为 当p,则q,(q当p,或者q每当p) p是q的充分条件,只要p就有q,即要得到q,具备p这个条件就足够
充分了
又有p->q<=>q<-p可得到q<-p (<=>表示p->q, q<-p这二者逻辑等价)
q<-p 为p->q的等价变形形式(p仅当q),q是p的必要条件,即q对于p的成立是必要的,没有q成立就没有p的成
立,
‘当’,‘仅当’这二个词的意义是不一样的,用仅当或当叙述二命题时结果和条件位置按说法而定
注意以上说法,条件 仅当 结果(p是q的充分条件),结果 每当 条件(q是p的必要条件)
注意,以上p->q,q<-p是同一命题(的二种说法),并不产生新的命题,涉及到一个蕴含的逆蕴含和双蕴含时才产
生新的命题,这些新的命题自然有不同于p->q的真值
逆蕴含:q->p, q仅当p,
双蕴含:p<->q,p当且仅当q
?? 函数的高级性质
高等数学(而非高等代数,注意代数是一个很广泛的概念)主要研究函数的分析性质也即高级性质,主要包
括函数的微分
?? 线代与矩阵
?? 数据库与关系代数
关系代数是一个代数系统,就跟线性代数一样,它有着有限的运算数集与运算符集
?? 数论与加密
数论主要研究整数的性质,
P Q p->q
真 假 假
假 真 真
真 真 真
假 假 真
编程新手真言 - GameRes.com 页码,20/101
mhtml:file://F:\Cpp\编程新手真言.mht 2008-7-30
?? 方程的近似求解
计算方法学包括数值微分,数值积分,
?? 函数插值
一次插值被称为线性插值
?? 计数原理与概率
?? 拓朴图论
拓朴图论研究与线长,点位无关的图形组合,它被各个行业各个分支所引用,如动态规划,等
?? 真正的计算模型
计算机是一个离散结构,因为它的计算模型是属于离散数学的,但是有人会问了,我们现在在使用的计算机
跟图灵机有什么联系,错,还是图灵机,因为现在计算机是在图灵机上构建的更高层抽象(我很庆幸你在
第一章的抽象思想没忘),就像冯诺依曼思想一样,它还是现代计算机体系结构的基础,请大胆发散你的思
维!
计算模型就是用户跟计算机交流的抽象(如果这个抽象被解决了,我们就完全不管它而去干其它事,因此你
感觉不到它的存在),当然我们希望不仅仅是表层的交流,但是只要实现了与计算机的交流,,这之后的处
理我们就不用管了(因为这并不属于计算模型学的内容)
用计算机来识别的语言只能是形式语言而非我们的自然语言,自然语言是一种形式语言的超形式,因为它
可以被解析为形式语言,并且带有它作为自然语言的非机器解析元素
形式语言是严格的(不符合条件就出错),自然语言是活拔的(出错范围小并不影响信息的传达)
计算机作为一种机器,给计算机设计它能识别的语言就是指明计算机进行识别我们给他的输入的模型(任何
语言都是一个形式上的模型,供识别和基于识别之上的高级功能比如交流用,并且这个语言可用于后来的
编程以给计算机下达指令(用语言进行编程给计算机下达命令是跟计算机的一种交流)后来计算机对我们
的输入进行计算(注意这个“计算”的范围是广的不只是数值处理)这里说到的计算机对它能识别的语言表
达的输入(是一些指令)进行处理,处理已经走过语言的范畴了,虽然是基于语言识别之上但不属于语言的
范畴),,
语言和文法
语言分为语言具体和语言形式,语言具体即最终由终止符构成的串,而语言形式即不一定最终由终止符构
成的串(它可以是语言具体和语言形式的杂合体)
那么什么叫串呢?
语言有组成它的最小单位即词(较大的单位有句子,段落,文章,卷等等,这些更大一级的单位又是由词或
其它单位构成的,,包括词在内,这些语言单位构造的语言具体或语言形式统统称为串,语言的最终目的就
是得出语言的一个一个串),和语言单位进行组合(产生串)的规则即文法产生式,任何语言最终都是具体语
言材料即词汇和具体语言规则即文法的组合
串是语言材料的模板(串代表一个一个的语言具体或语言形式),,而文法产生式是语言规则的模板(文法
产生式产生文法)
编程新手真言 - GameRes.com 页码,21/101
mhtml:file://F:\Cpp\编程新手真言.mht 2008-7-30
语言具体或语言形式的产生是通过串与串的等价替换得出来的(这是串与文法关生联系的地方与手段),,
如果存在w0->w1,即串w0可以替换w1,这个串间替换的规则就是“文法产生式”,,用来产生文法
以上到底什么意思?相信现在不难理解了
?? 正则表达式与有限自动机
有限自动机是一种抽象的识别装置
?? 函数增长与算法复杂性
?? 真正的递归
递归是一种思想,只要问题本身满足递归你才能,递归涉及到三个概念,回溯
?? 真正的迭代
提供
?? 查找遍历算法
?? 排序算法
机器,平台与网络
最小的东西都不会那么简单,因为它们都是与其它东西关系的,但也不会那么复杂,因为它们都是属于某
个领域的!
?? 真正的保护模式
8086/8088有20根地址线,寄存器为16位
寄存器的位数,16位表示决定了计算机的字长,即一次性能处理的数据总长度(16个位,始终记住,位是
计算用来表示存储单元和数据长度的最小单位,无论是外存或内存都一样),因此在程序中只能定义至多
16位长的变量,因为只能定义16长的数值(变量),故(寄存器大小)它也决定了计算机能表示的数值的大小,
即2的16决方(1048576),这种数值至多能用来表示的存储单位是1048576个,,或者说1048576个位,而这正
是一个16位的数值变量所能达到的最大值,因此这种寄存器为十六位的CPU只能表示至多1024kb个内存
位,虽然可能计算机本身不止这么多内存,虽然有时地址线不止寻址这么点的空间,但16位的寄存器只能
编程新手真言 - GameRes.com 页码,22/101
mhtml:file://F:\Cpp\编程新手真言.mht 2008-7-30
看见并寻址这么多的内存(因为地址线是CPU引脚线,是CPU的概念),寄存器的位数理论上决定了CPU
能"表示"的最大的内存范围或外存范围(当然,连CPU表示都无法表示的内存范围那就没有意义了),而地
址线决定了计算机实际能存取访问寻址到的内存范围,即1M,不包括CPU连看都无法看见的那部分,(当然
如果你的计算机都没有这么多的内存也是枉说)一个是16位,一个是20位,CPU是怎么样产生数值用来表
示地址线所能寻址到的1M地址的各个单元的地址的呢???,(这里以字节来说)1M可以分为64k个64b,这
样,寄存器用来存放地址,80286有24地址线,寄存器为32位
因为寄存器是存在于CPU中的,因此说是CPU的寻址,又为什么说CPU对内存的寻址呢,为什么我们在这
里口口声声地说CPU对内存的寻址呢,这有什么意义呢?这当然是为了计算机能正确执行指令而准备的,
这是计算机工作的本质啊(而为了执行指令,CPU能对内存进行寻址是首先必须要办到的,因为程序最终从
外存到内存中才能被CPU执行,CPU和内存都是靠电工作的,CPU提供执行指令的本领,而内存提供存储指
令的本领,这是冯仪曼说的,成功完全指令必须是CPU和内存一起工作完全的,而外存是靠磁来工作的,CPU
只能执行内存RAM内的指令,外存用来永久存放文件,称为持久化),程序要从外存被加载到内存中才能形成
指令
(指令在程序的CODE段中,EXE文件被加载到其进程空间时------这个过程术语叫映射到其进程空间,
它的代码段就在物理内存中了,因为只有代码段才包含指令,这部分要首先映射到物理内存中来,程序的
指令用到的数据------这通常表现为程序中的变量常量存在data中,数据段部分被开辟成堆或栈的方式被映
射到EXE的进程空间中来(分段机制),形成EXE的编译器不同开辟模式不同,像Delphi的编译器实现的exe
进程空间只有堆没有栈这种内存模式,堆和栈是系统级运用内存管理器进行分配内存的动作后(是系统级的
作用)形成的特殊内存块,这些内存块被映射到EXE的进程空间,这有点像EXE的DLL模块的映射模式,dll
文件被映射到其宿主EXE的进程空间时,不像EXE一样一开始就把代码段实际加载到物理内存中去了而是
在EXE实际调用到它时才到实际的物理内存中去(分页机制),跟EXE的DATA段一样属于一开始就映射到
EXE进程空间而不实际形成内存的部分,EXE,DLL被加载到内存后,它所占据的内存块就叫模块是静态
的,而进程是一个执行体的实例是活动的,线程是一个进程的某个执行单元,所以我们说程序被映射到到
其进程空间而不直接说映射到物理内存中,只是需要执行的代码段(注意此段非实模式彼段,后面会谈到)
才被进入到物理内存,但不需执行的那部分不需立即加载到内存(就像DATA和DLL)不得不说的是,进程空
间并非物理内存,前面一再强调"程序被映射到到其进程空间而不直接说映射到物理内存中",而且更准确地
来说,它们二者是完全没有关系的,4GB虚拟地址空间整个儿压根儿就是虚拟的(这个道理就像你玩一个客
户端为2G的游戏时,你启动客户端的时候已经把整个客户端的2G资源都加载到4GB空间去了,但是只要
这2GB中需要当前调用的那部分资源才进入内存,分段机制开避四GB任务空间,分页机制把需要用到的数
据动态加载到进程空间,任务空间就是进程空间,然后通过这些资源在程序中的自动变量表示离开内存),
它只是能表示4GB空间的虚拟地址而已,并不是实际的物理内存,仅仅根据32位寄存器能表示那么多的内
存来设置的那样一个机制,这种机制成全了将进程空间隔离的好处(所以四GB的说法是进程的一个概念通
常说4GB是进程的空间),而不像整个六四KB都可以,windows的虚拟内存管理器(保护模式下)会负责适当
的时候把需要的,映射到进程空间的内存搬到物理内存中去(分页机制),现在来解释"注意此段非实模式彼
段,后面会谈到"这句话,在FLAT下,已经没有段segment了,,在Flat模式下就无所谡code段跟data段的
了,因为原本实模式CS,DS意义下所指向的段全都在一个4GB大的虚拟地址空间中,实模式下段的意义
不存了,是段选择子,FLAT内存模式下,CS,DS根本就不实际用来指向段,即不实际用来指向一段内存
(而是存储一个称为段选择符的数据结构),FLAT下说的代码段是指EXE头定义的段,是RAW FILE(RAW
指没有分配实际内容的内存)里定义的段而非实模式下CPU段寄存器指向之"段",模拟原本的段取而代之正
是EXE头的节的意义,程序员无须知道这些段的实际的物理内存地址而只须知道虚拟地址,(我们知道在
32位寄存器,在RAW FILE里才有节section,有了PE文件的头中的这样段定义,当EXE被加载到内存中
来,就相当一个跟内存数据段一样的数据结构,虽然平址模式下无所谓代码段数据段,但PE文件的格式间
接实现了它,就像XML文件它本身就像一个数据结构一样所以它被很多程序语言的IDE用来持久化,被很
多程序用来保存信息如3D网格信息也会用xml文件格式)
编程新手真言 - GameRes.com 页码,23/101
mhtml:file://F:\Cpp\编程新手真言.mht 2008-7-30
?? 真正的二进制
请注意,人们说JAVA在语言级就实现了它的多线程,这句话与我们平常说的多线程是不一样的,,它的
多线程是针对JVM的多线程,而非具体针对我们日常使用的某个平台,,比如WIN32的线程
另外JAVA也不需要指针(虽然它提供了仿指针),这是因为JAVA一般不用于对本地编程(即它不面向
CPU,,也不面向运行它的某个OS编程),,因此指针都变得可有
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -