• 比特列标记类型,解释成不同数据
  • 整数
    • excess-3(加三码)
      • UNIVAC I, 4位表示0到9
    • 二进制
      • 1983, 任天堂计算机8位表示整数。目前32位和64位表示整数
      • 八进制(3位切分), 十六进制(4位切分)
  • 实数
    • 单独记小数点左移位数
      • 定点数,不好实现和计算。
      • 银行用加三码和定点数
    • 前位段表示数,后位段表示小数点位置
      • 浮点数,也可表示大整数
      • IEEE 754
        • 有误差
        • 第一位符号
        • 中8位是指数(-127-128), 负向左移正向右移,-127代表0, 128代表无限大
        • 后23位是尾数,从左到右代表1/2, 1/4, 1/8…
    • 二-十进制码
      • 用二进制表示十进制,加三码是一种,无误差
  • 发展
    • 变量名表示类型
      • Fortran, I-N开头表示整数,其它表示浮点数
    • 声明类型
    • 隐式类型转换
      • 整数+浮点数,Fortran出错,c都转换为浮点数, 整数除法舍弃小数
      • ML(1973年)中, 整数除法用x div y, 小数除法用 x / y
      • Python3.0(2008年)中, 不带舍去除法用 x / y, 带舍去除法用 x // y
  • 用户定义类型
    • C中的结构体, C++中函数成为类型,用户实现的类型称为类
    • 类型即功能
      • 访问控制(公开、非公开)
    • 接口
      • 不包含实现细节的类型
    • 异常成为类型
      • CLU和Java
    • 类型实现所有功能
      • 未实现。类型一致,功能就成立,没有bug
      • 类型不能表达的:数据处理时间,处理用内存,是否可以在线程中操作等
  • 总称型(部分可变类型)
    • 类型为参数创建类型,C++的模板,Java的泛型,Haskell的类型构造器
  • 动态类型
    • 类型信息和数值看作整体, 静态类型把变量名、内存地址、内存里的内容类型作为整体
    • 内存中同等类型对待,其中再细分类型
    • 灵活,运行时确定类型,但不能执行前编译检查bug
  • 类型推导
    • 最早OCamlHaskell这类ML语言擅长,现Scala等语言也越来越多
    • 目标是证明程序没有bug