目录
数据类型(Data Type)
变量的类型决定了什么?
(1)不同类型数据占用的内存大小不同
如何计算变量或类型占内存的大小
(2)不同数据类型的表数范围不同
(3)不同类型数据的存储形式不同
整型数
定点数与浮点数
字符型数据(英文字母、数字、控制字符)
(4)不同数据类型可参与的运算不同
整型
实型
字符型
指针类型
小结
不同类型的变量
讨论
数据类型(Data Type)
在冯·诺依曼体系结构中
*程序代码和数据都是以二进制存储的
*对计算机系统和硬件本身而言,数据类型的概念并不存在
问题:高级语音为什么要区分数据类型?
*更有效地组织数据,规范数据的使用
*有助于提高程序的可读性,方便用户的使用
在程序设计语音中引入数据类型的好处
*带来了程序的简明性和数据的可靠性
*有助于提高程序执行效率、节省内存空间
变量的类型决定了什么?
*占用内存空间的大小
*数据的存储形式
*合法的表数范围
*可参与的运算种类
(1)不同类型数据占用的内存大小不同
int ——基本整型,C标准未规定,系统相关
*在目前大多数系统上占4个字节
short int ,简写为short
*短整型,2个字节
long int,简写为long
*长整型,4个字节
unsigned——无符号整型(正整数和0)
*用来修饰int、short和long
float
*单精度实型,4个字节
double
*双精度实型,8个字节
long double
*长双精度实型,IEEE规定10个字节,系统相关
*VC++中占8个字节
char
*字符型,1个字节
注意:绝对不能对变量所占的内存字节数想当然
如何计算变量或类型占内存的大小
问题:如何计算变量占内存空间的大小?
用sizeof运算符
一元运算符
用sizeof运算符计算变量占内存空间的大小的好处
增加程序的可移植性
编译时执行的运算符,不会导致额外的运行时间开销
一般形式:
语法形式 | 运算结果 |
sizeof(类型) | 类型占用的内存字节数 |
sizeof(变量或表达式) | 变量或表达式所属类型占的内存字节数 |
(2)不同数据类型的表数范围不同
有符号和无符号整数的表数范围也不同
以2字节(16位)短整型为例
*有符号整数的最高位是符号位,使其数据位无符号整数的数据位少了1位
*有符号整数能表示的最大整数的绝对值仅为最大无符号整数的一半
(3)不同类型数据的存储形式不同
整型数
一个多字节的数据是如何存放到存储单元中的呢?
高位字节 | 地位字节 |
小端次序(Little-endian)
便于计算机从低位字节向高位字节运算
··· |
低位字节 |
高位字节 |
··· |
大端次序(Big-endian)
与人们从左到右的书写顺序相同,便于处理字符串
··· |
低位字节 |
高位字节 |
··· |
问题:如何存储实型数呢?
关键:确定小数点的位置
问题:如何表示实型数?
小数形式
指数形式——科学计数法
整数部分 | 小数部分 |
定点数(Fixed Point)
小数点的位置固定
定点整数
定点小数
定点数与浮点数
定点小数(纯小数)——小数点位于符号位和最高数值位之间
定点整数——小数点位于数值位的最低位
问题:如何表示实型数?
小数形式
整数部分 | 小数部分 |
指数形式——科学计数法
指数部分 | 小数部分 |
浮点数实现小数点位置可浮动的主要原因
将实数拆分成了阶码(Exponent)和尾数(Mantissa)分别存储
对于同样的尾数,阶码的值越大,则浮点数所表示的数值的绝对值就越大
同样是4个字节(32位)
*定点数表数范围受其二进制位数的限制——值域都是有限的
在计算机中通常是用定点数来表示整数和纯小数
用浮点数表示既有整数部分、又有小数部分的实数
字符型数据(英文字母、数字、控制字符)
以二进制编码方式存储,一个字节保存一个字符
字符编码方式
*取决于计算机系统所使用的字符集
*ASCII(美国标准信息交换码)字符集
*每个字符有一个编码值(查ASCII码表)
*字符常数就是一个普通整数
(4)不同数据类型可参与的运算不同
整型
*加、减、乘、除、求余
实型
*加、减、乘、除
字符型
*加、减(整数)
*对ASCII码值的运算
指针类型
*加、减(整数)和比较运算
小结
不同类型的变量
占用内存空间的大小不同
*用sizeof运算符计算变量占内存空间
数据在内存中的存储形式不同
合法的表数范围不同
可参与的运算种类不同
讨论
计算机为什么采用浮点数而非定点数来表示实数?
浮点数是实数的精确表示吗?
既然浮点数相对于整数能够表示更大的数,那么是否可以用浮点数取代整数呢?