什么是数据(data)?
数据在我们的生活中随处可见
如:
姓名 一笑奈何
身高1.78m
体重70kg
毕业学校 北京大学
这样看来 数据有小数 整数 字符之分
那C语言中的基本数据类型又是怎样的呢?
为什么要分数据类型?
一方面为了节约内存 另一方面为了方便访问
但是在计算过程中类型带来了很多麻烦和隐藏的问题
-
数据溢出
1.整数字面值如果是[-231,231 -1] 默认是int类型
int类型数据运算时得到的结果是int类型2.不同的数据类型进行运算
低字节的数可以隐式转换成高字节的数据
对于有符号的数扩充 符号位
对于无符号的数扩充
所有数据都是有字节宽度大小的 在赋值在运算过程中 都可以发生变化
隐式类型转换
char–> int --> long --> double
float --> double
short --> int
signed --> unsigned
把一个整数赋值给char类型变量,只会把整数最低8个二进制(最低一个字节)数据赋值给char变量
char如果要以%d %u的格式输出 进行扩展 补最高位(符号位)
char变量赋值给 int/unsigned 扩展位 补符号位
unsigned char如果要以%d %u的格式输出 进行扩展 补0
unsigned char变量赋值给 int/unsigned 扩展位 是0
char c = 128;//0000 0000 ... 1000 0000
printf("%d\n",c);//1111 1111 .... 1000 0000 = -128
printf("%u\n",c);//1111 1111 .... 1000 0000 = 4294967168
unsigned char c = 128;//0000 0000 ... 1000 0000
printf("%d\n",c);//0000 0000 .... 1000 0000 = 128
printf("%u\n",c);//0000 0000 .... 1000 0000 = 128`
3.unsigned 和 signed类型数据进行运算时 把 signed 数据转换为 unsigned
int a = -16;
unsigned int b = 10;
if(a+b>=0){// 恒成立 int+unsigned 结果为 unsigned