文档介绍:第3章值与类型
值——直接可用, 计算对象以数据值的形式表示
对事物性态的表征和度量,表征和度量必须在某个论域的抽象层次上
数据指称内含的表征和度量, 名—值
上层抽象的值是下层的名
成人: {老年, 中年, 青年} 123 123 十进制约定{001111011}
: 83 八进制约定{001010011}
青年: {15..25} 291 十六进制约定{100100011}
: 名值实现
{1111} {11001}
类型是计算机可能实现的结构和约定对客观世界差异的刻划。
同一类型的外延,即同一结构表示所有可能的值构成一个域。
分类原则:同样表示结构,同样语义解释,同样的操作。
同类型值运算结果:同类型。
无符号整数: 二进制解释的值
整数:符号值
值与类型
0
1
0
0
0
1
1
1
1
1
1
0
1
0
0
0
1
0
1
0
1
0
0
0
0
0
1
0
1
0
1
0
1
1
浮点数: 符号阶码尾数
程序语言中:基元(primitive)类型:整型/实(定,浮)/字符/真值/枚举
结构(structured)类型:元组/数组/记录(结构)/表/串
字面量、变量、常量
名字操纵值, 名: 字面量从名字即知类型字面值不变
变量符号名要声明类型值可变
常量符号名要声明类型值不变
基元值的名字是地址的别名, 地址值在计算机中不恒定
操纵地址的名字是指针(地址变量)
float *p, x = ; p=&x;
(p)203C
(x)117F
117F
续
名值可分导致
x = x + 1;
按名按名取值: 引用reference
存—值
左值右值
int & Rint = Svar
Rint 是引用类型的变量,即左值变量必须给一右值,因而成Svar别名
y = x ++ ; x 既是右值也是左值
程序中的求值方式
表达式中求值靠运算符
函数、过程引用改变值
函数得到函数值,过程改变环境中值(也是改变状态)。
函数和过程是操作集合的概括, 函数是从原始值到函数值的映射, 是一种事物的度量到另一种事物度量的联系。
运算符是特殊的函数
单目运算: E 等价表示为(E)
双目运算: E1E2 等价表示为(E1, E2)
值是头等程序对象(First Class Object)
程序语言中的值
字面量(整、实、布尔、字符、枚举、串)
复合量(记录、数组、元组、结构、表、联合、集合、文件)
指针值
变量引用(左值、右值)
函数和过程抽象,数学对象参与运算的权利是一样的,值是计算对象也要按一致性原则:
可出现在表达式中并求值
可作函数返回值
可单独存储
可以构成复杂的数据结构
可作函数参数
类型
类型定义值的集合和值上操作集合(V,Op)
类型系统一组可直接使用的类型
类型规则
类型检查机制
基本类型:按操作行为划分的值的集合
集合中元素个数叫基数#S
OP1:T T
OP2:T × T T
笛卡尔积 S × T={(x,y)|x∈S, y∈T}
# (S × T) = #S * #T 元组、记录
复合类型:基元值以下述数学操作复合
。。
u v
。。。
(v,a)(v,b)(v,c)
。。。
(u,a)(u,b)(u,c)
。。。
a b c
S
T
S × T
。。
u v
。。。
righta right b right c
。。
left u left v
。。。
a b c
S
T
S+T
不相交联合 S+T={left x|x∈S} {right y| y∈t}
#(S+T) = #S + #T 变体记录, 联合, ML中构造
续