1.数据类型---数据的类型
解决实际问题的角度:
统计人口总数---整数
统计身高体重---小数
2.C语言中数据类型的划分
基本数据类型:
a.整型
b.浮点型
c.字符型
3.变量 常量
变量:在程序运行过程中,其值可以改变
改变的原因:变量实质是一个储存数据的内存空间
变量名:
1.数字,字母,下划线组成
2.不能以数字开头
3.区分大小写
4.不能与关键词重名
5.不要与二级关键词重名 //include
6.不要与库函数重名
常量:在程序运行过程中,值无法改变
4.定义变量-----开辟了一块空间
int a = 10 // 定义一个变量a 同时给a一个值10 --->初始化
int a;
a = 10;//赋值
字节序存放问题
小端模式:高位放在高地址处,低位放在低地址处
大端模式:高位放在低地址处,低位放在高地址处
大端模式与小端模式是由于硬件设计决定的,在进行网络交互时,默认为大端模式
int a = 0x12345678; //4个字节
+---------+ 大端存储
| 0x12 | 0x1000
+---------+
| 0x34 | 0x1001//以字节 进行编号 ---地址 --编址
+---------+
| 0x56 | 0x1002
+---------+
| 0x78 | 0x1003
+---------+
| | 0x1004
+---------+
| | 0x1005
+---------+
+---------+ 小端存储
| 0x78 | 0x1000
+---------+
| 0x56 | 0x1001
+---------+
| 0x34 | 0x1002
+---------+
| 0x12 | 0x1003
+---------+
| | 0x1004
+---------+
| | 0x1005
5.进制
十进制转n进制:除以n取余
n进制转十进制:加权求和
一个八进制数对应三位二进制
一个十六进制数对应四位二进制
6.整型数据:
整型数据大小
int | 4字节 |
short | 2字节 |
long | 8字节 |
long long | 8字节 |
signed---有符号 unsigned---无符号
*64位平台
整型数据的取值范围
类型 | 位数 | 取值范围 |
[signed] int | 16 | -32768-32767 即 -2^15-2^15-1 |
Unsigned int | 16 | 0~65535 即 0-2^16-1 |
[signed] short [int] | 16 | —32768-32767 |
Unsigned short[int] | 16 | 0-65535 |
long [int] | 32 | -2147483648~2147483647 |
unsigned long [int] | 32 | 0-4294967295 |
计算机储存数据都是二进制形式,以数据的补码形式储存,正数的原码,反码,补码是相同的。负数的补码是其反码加1。
整型数据的溢出
#include <stdio.h>
void main()
{
int a,b;
a=32767;
b= a+l;
printf("%d, %d\n a, b);
}
运行结果为:
32767 ,-32768
a的二进制形式为0111111111111111加1后最高位变为1其余为0,但是int型只能存储后十五位也就是十五位0,此时由于最高位为0,识别为带符号且为负号,正好就是-32768的补码,所以输出为-32768。
7.浮点型数据:
-
浮点型常量:
1.23
1.23e 科学计数法
-1.23e-4 // -1.24 * 10^-4
浮点型变量:
float | 4字节 |
double | 8字节 |
浮点型的储存:
eg:-9.25
step1:十进制小数转化为二进制小数
整数部分:
9---1001
小数部分乘2取整:
0.25*2=0.5---0
0.5*2= 1 ---1
0.01
即1001.01
step2:将二进制的小数用科学计数法表示
1.00101*10^3
step3:按照IEEE的754标准存放
float 32位
符号位| 指数位 | 尾数位
1 | 8 | 23
1 | 3+127 | 00101
1 |1000 0010|00101 000000000000000000
1100 0001 0001 0100 0000 0000 0000 0000--->C1140000
double 8位
1 | 11 | 52
浮点数的比较:
eg: 0.9
0.9 * 2 = 1.8 --- 1
0.8 * 2 = 1.6 --- 1
0.6 * 2 = 1.2 --- 1
0.2 * 2 = 0.4 --- 0
0.4 * 2 = 0.8 --- 0
0.8 * 2 = 1.6 --- 1
0.6 * 2 = 1.2 --- 1
0.9按照乘2取整会陷入循环,言下之意0.9用二进制表示会出现类似十进制里面的无限循环的情况,取得位数越多就会越接近0.9,相比下来用double定义0.9比float定义会更精确更接近0.9。