一、地址
整型变量占4个字节,那么他的首地址+1在编译器里面认为是跳到后面的一个整型变量位置所以他会+4
变量是表示一块内存空间,所以变量是用来存放数据的.空间是由地址组成的,所有内存中的所有变量都有自己的地址。
总结:变量的地址进行加减操作,看是什么类型
int 跳 4
char 跳 1
short 跳 2
二、浮点型----实型
数据类型不同,大小不同
定义赋值初始化: 单精度float : 4
双精度double : 8
长双精度 long double : 16
输入输出格式
float : 输入输出格式为%f
double: 输入输出格式为%lf,(老的编译器)输出可以%为f,但是输入一定要lf --- 如果你输入的时候是用f的话编译器会把你这变量当成float去输入导致数据丢失
long double: 输入输出为%Lf
各个类型输入输出格式统计
编译输出浮点型数据,默认是6位精确,但是为了数据能以最大的精确长度输出,会在 %后面加上 . 多少 例如%.2f
E表示科学计数法: 这种数据默认是浮点型,E的后面是整数,E前面也要一个数
2E3:表示2X10的3次方(标准写法:2E+03)
数据在机器内存的存放形式:
基本类型:short int long long long char 以二进制(补码)形式存放
浮点型:涉及指数部分
三、字符型
字符数据=字母 + 符号 + 数字字符 +转义字符
字符变量的定义: char data;//定义一个叫做 data 的字符变量
字符变量的赋值: data = ',';
字符变量的初始化: 初始化 = 定义+赋值 char char_data = '1';
· 取值范围: -2的7次方 ~ 2的7次方 -1
对于字符,字符有对应的ascii表:设置字符数据的存放格式和表达方式。 字符编码 ascii表明,每一个字符都有自己的 字符表达+十进制表达+八进制表达+十六进制表达,所以字符类型和整形可以互相转换表示
字符和整形相互转换表达
#include <stdio.h>
int main()
{
int int_a = 96;
char char_b = 'a';
printf("%c\n",int_a);
printf("%d\n",char_b);
return 0;
}
转义字符
\ddd 表示八进制 例如 \066
\xhh 表示十六进制 例如 \xfff 切记不能\0x开头
布尔类型
使用它需要包含一个头文件 stdbool.h 其实就是让编译器编译的时候找对应的文件,那么文件里面的内容你在写代码的时候就可以写去用
布尔变量只有两种情况,用来判断真和假 真:true表示 1 假:false表示 0
#include <stdbool.h>
int main()
{
bool flag = false;
bool a = false;
if(a==false)
{
printf("你好!\n");
}
else
{
printf("世界!\n");
}
return 0;
}
//因为布尔变量起始就是0或者1,
//实际上只需要占一个位的空间,
//但是在操作系统和最小的处理基本内存单位是字节,
//故一个布尔变量是1个字节
数据类型计算大小
计算数据类型或者变量的大小我们可以用杂项运算符来帮我们计算:sizeof
关于sizeof: 他是帮我们计算数据类型的字节长度,这个长度是确定的值,这个数据值也有类型: 比较新的编译器(16.04以上):长整形 比较老的编译器(12.04以下包括12.04):整形
int 的大小: 32和64:4个字节 16:2个字节
long的大小: 32: 4个字节 64:8个字节
long double: 32:12个字节 64:16个字节
四、数据类型转换
自动转换(隐式转换)
char ---》 short ----》 int ---》 long ---》 double
混合运算: 当一条式子中处在不同类型的数据进行运算的时候,会自动转成高精度的类型
int a=1;
short b = 2;
所以printf("%d\n",a+b-a*b+a); //a+b-a*b+a会变为int
赋值运算: 等于号右边的类型会自动转成等于号左边的类型
float b = 2.45; int a = b;
//b本来是浮点型,
//在赋值运算的时候自动转成int型
printf("%d\n",a);
注意: 低精度转高精度:取值范围变大,好! 高精度转低精度:取值范围变小,数据可能会丢失,不好!
强制转换(手动转换)
第一种强制转换: int a = 11; printf("%ld\n",(long)a); 第二种强制转换 “提高可读性” int a = 1; float b = (float)a; 第三种强制转换 混合运算中的强制转换 int a = 2; long b = 1; printf("%d\n",a+(int)b);