一、数据类型
编程就是把人类的问题 描述给计算机,让计算机解决 。也就是说编程语言是人类世界和计算机世界沟通的桥梁。那么为了更好地描述问题,就需要划分数据类型。
二、C语言中数据类型
基本数据类型,包括整型、浮点型、字符型
构造数据类型
指针类型
空类型
划分这些是因为人类语言中有数字,字母等,不同的类型所驱动的计算机内部运作部件也不同。
三、基本数据类型介绍
常量:在程序运行过程中,不能改变的量
变量:在程序运行过程中,能被改变的量
- 整型
(1).常量形式:
123 //十进制的整型常量
0123 //八进制的整型常量(0表示八进制)
0x123 //十六进制的整型常量(其中0x是十六进制的前缀)
十六进制: 0 1 2 3 4 5 6 7 8 9 a b c d e f
进制(进位的制度):逢几进1 (满几进1)。
人类世界中常使用十进制。
a.十进制转换为二进制
方法:除2取余法 2|123
2|61 ... 1 (低位)
2|30 ... 1
2|15 ... 0
2|7 ... 1
2|3 ... 1
2|1 ... 1
2|0 ... 1 (高位)
111 1011
0111 1011
注意:最后1还要除以2
b.二进制转十进制
方法:加权求和
权64 32 16 8 4 2 1
2^1 2^0
1 1 1 1 0 1 1
权8 4 2 1
1 1 1 1
c.二进制转八进制
1位八进制数 对应 3位 二进制数
001 111 011
1 7 3
d.二进制转十六进制
1位十六进制进制数 对应 4位 二进制数
0111 1011
7 b
(2).变量形式:
定义变量:数据类型 变量名;
int (默认为signed int)
short
long
long long
unsigned / signed
变量名取名规则:
1.数字、字母、下划线组成
2.开头不能是数字
3.不能与关键字重名
4.不要和预处理命令 及 库函数名重名
(3).数据类型的大小 :表示的是该数据类型 所占内存空间的字节数
int 4字节
short 2字节
long 8字节
long long 8字节
通过sizeof(运算数) 计算运算数所代表的数据类型占用的内存空间的字节数
运算数 可以是一个类型名sizeof(int)
可以是变量名 sizeof(a)
可以是个常量或表达式sizeof(10)
sizeof(a+10)
(4).变量给值
int a = 10; //定义的同时给值 初始化
int a;
a = 10; //赋值
(5).大小端存储
变量实际上对应是一块可以被修改的空间,在电脑上一般使用小端存储
小端 高高低低
高位数据 存在 高地址(地址编号大) 处
低位数据 存在 低地址 处
(6). 整型数据的存储
数据在电脑里以补码形式存储
正数:原码 反码 补码 都是一样的
负数:反码 + 1
如:-7
这是一个有符号数
0 | 000 0000 0000 0000 0000 0000 0000 0000
前面为符号位,0表示正,1表示负
后面为数值位
无符号数则表示所有的二进制位 都是数值位
有符号则表示最高位充当了符号位,其余位是数值位
-7
1 | 000 0000 0000 0000 0000 0000 0000 0111 //原码
1 | 111 1111 1111 1111 1111 1111 1111 1000 //反码
1 | 111 1111 1111 1111 1111 1111 1111 1001 //补码
f f f f f f f 9
负数的反码 是 原码 的符号位不变 其余位按位取反
补码再取反加1为原码
unsigned char a = 65535;
printf(“a = %hd\n”,a);
a [ 1111 1111 1111 1111 ]
|
%hd //d 表示以有符号十进制形式来打印
|
1 | 111 1111 1111 1111
|
最高位是1 表示这个值是某个负数的补码值
最终打印的一定是原码值
1 | 111 1111 1111 1111取反加1
1 | 000 0000 0000 0001 // -1
所以打印出来是-1
(7). 整型类型取值范围
int 4字节
unsigned int 0~2^32-1
signed int -2^31 ~ 2^31- 1
short 2字节
unsigned short 0~2^16-1 //65535
signed short -32768 ~ 32767
long 8字节
long long 8字节
(8).整数溢出
eg:short 类型数据大小为2字节 16位
65535 (1111 1111 1111 1111)再加上1就会溢出
成为:1 0000 0000 0000 0000
结果就是 0;
2.浮点型
(1).常量形式
1.23
1.23e-4 ----科学计数法形式 1.23 * 10^-4
1.23E-4
(2).变量
float ----- 单精度(4字节)
double ----- 双精度(8字节)
long double ----- (16字节)
定义变量
float f;
(3). 浮点数的存储
a.首先将十进制形式的小数,写成二进制形式小数
整数:除二取余法
小数:乘二取整法
eg :12.125
12 --- 1100
0.125 *2 = 0.25 --- 0
0.25*2 = 0.5 --- 0
0.5 * 2 = 1 --- 1
1100.001
b.将二进制形式的小数写成科学计数法形式
1.100001 * 2 ^ 3
c.按照IEEE754标准存放
float :(4字节 32位)
1位 | 8位 充当 指数位 | 23位
符号位 | 指数位 +127(偏移量 )| 尾数位
0 | 10000010 | 100001
尾数位不足23位,后加0补全。
0100 0001 0100 0010 0000 0000 0000 0000
4 1 4 2 0 0 0 0
double:
1位 | 11位 充当指数位 | 52位
符号位 | 指数位 +1023(偏移量 )| 尾数位
(4). 浮点数的比较
代码中出现的 变量 或 常量 一定有其对应的数据类型
代码中出现的 浮点型常量 默认识别为 double 类型
浮点数的比较:保证精度一致、类型一致
常量也可以指定类型:
0.9f //表示被识别为 float类型
123 //默认识别为 int类型
123L //识别为long类型
123LU //unsigned long
123LL //long long
123LLU //unsigned long long
3.字符型
(1). ASCII码
‘a' ----编码(ASCII码)----0101010-----计算机中保存的实际上是这个符号对应的ASCII的编码值
(2).常用的ASCLL码
0~32 控制字符(不可见字符)
48~57 数字字符 '0' ~ '9'
65~90 英文的26个大写 字母的符号
97~122 英文的26个小写 字母的符号
(3).字符型常量
'a' //字符常量 a这个常量
(4). 字符型变量
char
char ch; //占一个字节
如:char ch = 'a';
ch这个变量中 最终放的放的实际上是 'a' 对应的ascii码 值 (整型)
所以char 也一种整型类型 说char和整型之间是通用的
char可称之为tiny int --小整型
(5).字符型取值范围
unsigned char ch; //[0 ~ 255]
signed char a = -10; //[-128 ~ 127]
(6).大小写转换
大写 转 小写 +32