目录
C语言中的数据类型
常量与变量
常量 为"在程序运行过程中", 不能改变的量
变量 为"在程序运行过程中", 能被改变的量
整型
1.整型常量
123 十进制数
0x123 十六进制数
0123 八进制数
进制间的转换
十进制转二进制 :除2取余法(辗转相除法)先算出来的余数为低位,后算出来的余数为高位。
十进制转八进制、十进制转十六进制都能用辗转相除法。
二进制转十进制 :加权求和
64 32 16 8 4 2 1
2^1 2^0
1 1 1 1 0 1 1
同理,八进制转十进制、十六进制转十进制都能用加权求和。
二进制 => 八进制 对应关系:
1位八进制数 对应 3位 二进制数
001 111 011
1 7 3
二进制 => 十六进制 对应关系:
1位十六进制进制数对应 4位 二进制数
0111 1011
7 b
2.整型类型
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字节
unsigned 无符号 --- 表示所有的二进制位 都是数值位
signed 有符号 --- 表示 有一位(最高位)充当了符号位,其余位是数值位
默认为signed
3.变量的定义
数据类型 变量名;
变量名即给变量取的名字,有下列要求:
a.数字、字母、下划线组成
b.开头不能是数字
c.不能与关键字重名
d.不要和预处理命令及库函数名重名
变量的给值有两种方式:
int a = 0;初始化时给值
int a;a = 0;赋值
4.整型数据存储
大小端
小端 :高高低低
高位数据 存在 高地址(地址编号大) 处
低位数据 存在 低地址处
例 int a= 0x12345678
x86 体系结构数据存储方式为小端模式 。
大端 数据存储方式与小端相反。51 单片机 等单片机数据存储方式为大端模式。
存储规则
计算机存储整数都是 存储他们的补码形式。
正数的原码、反码、补码是一样的,是它的二进制形式。
负数的反码是原码的符号位不变其余位按位取反,负数的补码为反码+1,对于有符号整型,最高位为符号位,0表示正数,1表示负数。
以含符号int型数-7为例,下面为它的原码、反码和补码:
原码 1000 0000 0000 0000 0000 0000 0000 0111 最高位1代表负数。
反码 1111 1111 1111 1111 1111 1111 1111 1000
补码 1111 1111 1111 1111 1111 1111 1111 1001
将补码再求补码,可以得到原码。
5.考点
整数的溢出
整数存储和使用分开的,需要注意原码和补码的转化,还要注意根据有符号和无符号判断值的变化。
浮点型
1. 常量形式
1.23
1.23e-4 科学计数法形式 1.23 * 10^-4,e可大写
2.浮点型变量
数据类型 变量名
float 单精度 4字节
double 双精度 8字节
long double 16字节
3.浮点数的存储
a.将十进制形式的小,整数除2取余法,小数部分乘2取整法写成二进制形式的小数
b.将二进制形式的小数写成科学计数法形式
c. 按照 IEEE 754 标准存放
float 型占用4字节36位
1位符号位
8位指数位 :科学计数法形式种的指数+127(127为偏移量)
23位尾数位:科学计数法形式中的小数,位数不够在后面用0补齐。
double型占8字节64位,精度比float型高
1位符号位
11位指数位 :科学计数法形式种的指数+1023
52位尾数位
4.考点
浮点的比较 :
代码中出现的浮点型常量默认识别为 double 类型 ,浮点数的比较需要保证精度一致或类型一致
常量也可以指定类型:
0.9f //表示被识别为 float类型
123 //默认识别为 int类型
123L //识别为long类型
123LU //unsigned long
123LL //long long
123LLU //unsigned long long
字符型
1.字符型常量
'a'
2.字符型变量
char 1字节
char ch = 'a'; ch这个变量中 最终放的放的实际上是 'a' 对应的ascii码 值 (整型)
unsigned char ch; //[0 ~ 255]
signed char a = 10; //[-128 ~ 127]
a = -10;
3. 应用
ASCII码
0~32 控制字符(不可见字符)
48~57 数字字符 '0' ~ '9'
65 ~90 英文的26个大写 字母的符号
97 ~122 英文的26个小写 字母的符号
char ch = '1';
printf("%d\n",ch - 48); //数值1
printf("%d\n",ch - '0'); //数值1
大写 转 小写 +32
数据输出的部分打印形式
%d 含符号以十进制打印,用于int型
%#x 以十六进制打印
%#o 以八进制打印
%hd 含符号以十进制打印,用于short型,h--half
%u 无符号形式打印
%c打印符号