目录
4、实例分析:auto,register, static对比分析
一、基本数据类型
- 变量是一段实际连续存储空间的别名
- 程序中通过变量来申请并命名存储空间
- 通过变量的名字可以使用存储空间
- 数据类型代表需要占用的内存大小
- 变量的本质是一段内存的别名
- 变量隶属于某一种数据类型
- 变量所在的内存大小取决其所属的数据类型
二、有符号与无符号
1、数据类型的最高位用于标识数据的符号
- 最高位为1,表明这个数为负数
- 最高位为0,表明这个数为正数
2、如何知道一个数是不是正数?
#include <stdio.h>
int main(void)
{
int sign = 0;
char i = -5;
short j = 5;
int k = -1;
printf("%d\r\n", (i & 0x80)!=0);
printf("%d\r\n", (j & 0x800)!=0);
printf("%d\r\n", (k & 0x80000000)!=0);
}
利用操作符&(全为1才是1),将数据的最高位与1进行&运算,若为1,则返回1,说明原数为负数。
3、在计算机内部用补码表示有符号数
- 正数的补码为正数本身
- 负数的补码为负数的绝对值各位取反后加1
4、在计算机内部用原码表示无符号数
- 无符号数默认为正数
- 无符号数没有符号位
5、对于固定长度的无符号数
- MAX_VALUE+1 →MIN_VALUE
- MIN_VALUE-1 →MAX_VALUE
6、当有符号数撞见无符号数
#include <stdio.h>
int main()
{
unsigned int i = 5;
int j = -10;
if(i +j > 0 )
printf("i + j > 0\n");
else
printf("i + j <= 0\n");
return 0;
}
运算中,有符号数会变成一个正数。
7、错误地使用了unsigned
#include <stdio.h>
int main()
{
unsigned int i = 0;
for (i = 9; i >= 0; i--)
{
printf("i = %u\n", i);
}
return 0;
}
8、小结
(1)有符号数用补码表示
- 正数的符号位为0
- 负数的符号位为1
(2)无符号数用原码表示
- 无符号数没有符号位
- 无符号数只用于表示正数
(3)unsigned只能修饰整数类型的变量
- 当无符号数与有符号数混合计算时,会将有符号数转换为无符号数后再进行计算,结果为无符号数。
三、浮点数的秘密
1、内存中的浮点数
(1)浮点数在内存的存储方式为∶符号位,指数,尾数
![](https://i-blog.csdnimg.cn/blog_migrate/70e72532b839fa69981d954f68cfc62e.png)
float与double类型的数据在计算机内部的表示法是相同的,但由于所占存储空间的不同,其分别能够表示的数值范围和精度不同。