实现功能-------数据处理---------存储内存----->占用内存空间大小----->数据类型
衡量内存空间大小的单位---------->字节byte 位 bit(编程)
1. 数据类型的作用
1)数据类型决定对应的数据所占的内存空间大小
2)数据类型决定数据在内存中的排列方式(位排列方式---->存储格式)
3)数据类型决定内存空间存储的数据的范围
4)数据类型决定数据的使用方式
2. 数据类型的分类:(了解)
1)基本数据类型: 整型 字符型 实型, 固定,不可拆分,
2)构造数据类型:由其他类型构造出来类型,可拆分为基本数据类型
数组类型
结构体类型
共用体类型
枚举类型
3)指针类型
1)空类型: void 用于函数的参数,函数的返回值
void * 万能型指针
1. 纯数字组成,整数,用整型表示, 89 9000 467 -199 -399 145235 56 45 7788
2. 常用关键字: int 个字节
3. 分类:
1)短整型: short (int) 所占空间大小2个字节 , 省略不写
2)整型 int 所占空间大小4个字节,
不同编译平台,所占空间大小不一样, win32平台下,空间大小一般都是4个字节
3)长整型 long (int) 个字节 int省略不写
4)长长整型: long long (int) 空间大小8个字节
1)有符号数据: 数据有正负之分,关键字:signed, 一般省略不写,默认为有符号数据
存储格式: 符号位 数据位
符号位:利用最高位表示符号位,最高位1,负数,最高位为0,正数
2)无符号数据: 数据没有正负之分,相当于只有正数,没有负数,关键字: unsigned
存储格式:数据位
int main() { //有符号数据,signed 省略不写 int age; //signed int age ; long long b = 689; //signed long long b = 689; int g = -1111; printf("%d\n",g); //无符号数据 unsigned int c = 100; unsigned short f = 90; //unsigned short int f = 90 return 0; } |
1. 存储数据的范围
以int, unsigned int 为例
1)有符号整型:
最大值:符号位为0,31数据位为1,
最小值:符号位为1, 31数据位为0, - 21474836478
2)无符号整型:
最大值:32个数据位为1,4294967295
最小值:32个数据位为0, 0
练习:
short [-32768,32767]
unsigned short [0,65535]
2. 数据的溢出规律
给变量赋值,超过数据类型对应的范,在内存中存储的数据是溢出后的数据
; //2147483649 不在int类型数据范围内,则发生溢出
1) 数据如果从最大值方向溢出,则从最小值开始递增
2) 数据如果从最小值方向溢出,则从最大值开始递减
1. 表示,用单引号括起来的数据,‘a’‘ ’ ‘&’ ‘k’‘@’‘\t’‘\n’ ‘\101’(八进制表示字符)
‘\xab’(十六进制字符)
一个字符实际上在内存中是以整型的格式存储,用个特定的整数表示一个特定的字符,字符与整数之间存在一一对应的关系,由ascii码表(美国标准信息交换表)决定
3. 分类:
有符号字符: (signed) char ,1个字节,signed 省略不写,默认有符号数据
无符号字符: unsigned char , 所占空间大小1个字节
1. 存储范围:
char [-128,127] //
unsigned char [0,255]
2. 字符的分类
1)控制字符(转义字符):只体现功能,不显示字符本身,’\n’
2)打印字符: 可以显示在显示终端上,显示字符本身
‘\0’ -------------- 0 空字符
‘\n’ ------------ 10 换行
‘\t’ --------- 9 水平制表符,表示一个符在显示终端占8个字符的位置
‘\r’ ----------- 13 回车
标准换行‘\r’’\n’
‘0’ ~ ‘9’ 48 ~ 57
‘a’~ ‘z’ 65 ~ 90
‘a’ ~ ‘z’ 97 ~ 122
‘ ’ ------ 32 空格字符
‘\hhh’ h[0,7],采用八进制的形式表示一个字符
‘\101’--------->1*8^2 0 *8^1 1*8^0 =65
‘\xhh’ h[0,f] 采用十六进制的形式表示一个字符, x 表示十六进制
‘\x41’ ------->65
\’ 单引号
\” 双引号
\\ 反斜杠字符
int main() { //字符数据 char char a = 'k'; //给字符变量赋字符值
printf("%d\n",a); //打印字符a的ascii码值 printf("%c\n",a); //以字符的格式打印a的值
char b = 67; //十进制 //给字符变量赋acii码值 printf("%c\n",b);
char ch = 3; //给字符变量赋ascii码值为3的字符 printf("%c\n",ch);
char bf = '\n'; bf = '\0'; printf("bf = %c\n",bf); //转义字符体现功能,不显示字符本身 printf("bf = %d\n",bf);
printf("hell world\n"); printf("\tsjhk\n"); //\t 功能,占8个字符的位置
char pk = '\101'; //八进制 printf("%d\n",pk); //ascii码值 printf("%c\n",pk); pk = '\x42'; //十六进制 printf("%d\n",pk); //ascii码值 printf("%c\n",pk); } |
练习:
1)对于一个字符是否能够参与运算?
‘a’*4 ’b’ //可以
97*4 66
2)如何将一个数字字符ch转换为整型数据?
‘5’-------->5
ch – 48;
3)大小字母写字符ch(小写字符) 相互转换?
ch 32 == ch
ch – 32 == ch(大写字符)
4)如何判断一个字符ch,是否为大写的字母字符?
if(ch >= ‘a’ && ch <= ‘z’) {//大写的字符}
5)数据的计算
char ch = 130;
printf(“%d\n”,ch); //
char ph = ‘z’;
ph = ph *4;
printf(“%d\n”,ph)?
{ //char [-128,127] char ch = 130; //130 - 256 printf("%d\n",ch);
ch = 'z' * 4; //122 * 4 = 488 //488 - 256 - 256 printf("%d\n",ch); } |
1.也称为浮点型,由小数点组成的数据 90.23 1.23 4.56 90.0
2. 分类:单精度关键字 float 所占的内存空间大小4个字节
双精度 关键字double 所占的内存空间大小8个字节
3.实型数据不使用signed 或者unsigned 修饰是否为有符号数据
小数位指数位,跟整型和字符型的存储格式不一样
5.范围
float和double的范围是由指数的位数来决定的,float的指数位有8位,而double的指数位有11位,分布如下:
float: 1bit(符号位) 8bits (指数位) 23bits(尾数位) //32bit
double: 1bit(符号位) 11bits(指数位) 52bits(尾数位) //64bit
于是:float的指数范围为 -127~ 128
double的指数范围为 -1023~ 1024
并且指数位是按补码的形式来划分的。其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。
float的范围为 -2^128 ~ 2^128, 也即 -3.40e 38 ~ 3.40e 38;// 3.4*10^38 double的范围为 -2^1024 ~ 2^1024,也即 -1.79e 308 ~ 1.79e 308。
6. 说明:数据比较的时候,不使用实型数据
1)整型变量与零值比较,应当将整型变量用“==”或“! =”直接与 0 比较。
假设整型变量的名字为 value,它与零值比较的标准 if 语句如下:
if (value == 0)
if (value != 0)
2)浮点变量与零值比较,不可将浮点变量用“==”或“!=”与任何数字比较。千万要留意,无论是 float 还是 double 类型的变量,都有精度限制。所以一定要避免,将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。
假设浮点变量的名字为 x,应当将
if (x ==0.0) // 隐含错误的比较
转化为
if((x>=-epsinon) && (x<=epsinon))
其中 epsinon 是允许的误差(即精度)
{ int ph = 65; //符号位 数据位
printf("%c\n",ph); printf("%d\n",ph); printf("%f\n",ph); //符号位 小数位 指数位
float pg = 57.67; printf("%f\n",pg); printf("%d\n",pg);
//1) 适用于实型数据的格式符%f %lf 不能用于整型数据和字符型数据 // 适用于字符和整型数据的格式符不能用于实型数据
//2) 实型数据有精度限制,给变量赋的值和在内存中存储的值有误差范围 // 实型数据不能与任何数字直接进行比较 //float a ; if(a) //数学:0-0.01 >= 0 <= 0 0.01 } |