一、分类:
1、整数:short、int、long、longlong、char
2、浮点数:float、double、long double
3、逻辑:bool
4、指针
5、自定义
(1)输出格式:int(%d)、iong(%ld)、double(%lf)
(2)所表达数的范围:char<short<int<float<double
char 1字节:-128~127 short 2字节:-32768~32767
int:取决于编译器 long 四字节二 long long 8字节
(3)内存中所占据的大小:1字节到16字节
sizeof 是一个运算符,给出某个类型或变量在内存中所占的字节数(sizeof(int)、sizeof(i))
(4)内存中的表达形式:二进制(补码)、编码
二、整数
unsigned
(1)、unsigned,是为了纯做二进制运算,主要是为了移位,但也能扩展数能表达范围(%u)
加上unsignde表示 这个整数不以补码的形势存在,这个整数没有负数部分只有零和正数,使得这个类型所表达的数在正数部分扩大一倍,但是不能表达负数了
char :-128~127 unsigned char:0~255
输出则为c=255 i=255
(2)、如果一个字面常量想表达自己为unsigned,可以在后面加u或U
8进制和16进制
一个以0开始的数字字面量是8进制
一个以0x开始的数字字面量是16进制
%o用于8进制,%x用于16进制(同样scanf也可以用)
三、浮点类型(无特殊需要用double)
double表达的范围比float要更大一些
(1) 输入 输出
float %f %f %e (%e输出的是科学计数法 +004---->乘10的四次方 0.000001-->1e-6)
double %lf %f %e
(2).df% 表示精度
在%与f之间加.d可以指定输出小数点后几位,但是这样的输出做的是四舍五入(看最接近的一位与五的关系)
(3) 超出范围的浮点数(整数不能表示无穷,浮点可以)
printf输出inf表示超过范围的浮点数:±∞
printf输出nan表示不存在的浮点数
四、bool
(1)使用前:使用bool类型前应加头文件:#include<stdbool.h>,之后就能使用bool ture false
bool只有ture和false,0是false,其他情况都是ture
(2)使用范围:可用于逻辑表达式,也就是”或“ ”非“ ”与“之类的逻辑运算和大于小于之类的关系运算,逻辑表达式结果为真或假
五、字符类型
(1)char是一种整数,也是一种特殊的类型:字符
用单引号表示字符字面量:‘a’,‘1’ (单个字符)
‘’也是一个字符
(2)输出 输入
printf和scanf里用%c来输出输入字符
(3)'1'与1的关系
显然'1'与1不相等,‘1’字符用ASCII值表示
(4)字符计算
一个字符加一个数字得到ASCII码表中那个数之后的字符
两个字符相减,得到他们在表中的距离
六、转换类型
1、自动转换类型
(1)当运算两遍字符类型不同时
当运算符的两遍出现不一致的类型的时候,会自动转换成较大的类型(大指的是范围大)
char<short<int<long<long long
int<float<double
(2)输入 输出
printf:任何小于int的类型会被转换成int;float会被转换为double
scanf:scanf不会转换,short--->%hd int--->%d long long--->%ld
但是不能以整数的形式输入一个char,只能先输入一个整数再把整数给char
2、强制类型转换:要把一个量强制转换成另一个类型(通常是较小的类型)
(1)格式:(类型)值 eg:(int)10.2
注意:强制转换时的安全性,小的变量不总能表达大的变量
强制转换不是将原先值置换,而是换算了一遍
七、逃逸字符
(1)定义:逃逸字符表达无法印出来的控制字符或特殊字符,它由一个反斜杠“\”开头,后面跟着另外一个字符,这两个字符组合起来,组成一个字符
(2)\b:回退一格:让下一个输出回到上一个位置,降上一个位置的东西覆盖了
(3)\t:每行固定位置;一个\t使得输出从下一个制表位开始;用\t才能使得上下两行对齐
(4)\n和\r的区别:
\n回车,回到当前行的首行,而不会换到下一行,如果接着输出,本行以前的内容会被逐一覆盖
\n换行,换到当前位置的下一行,而不会回到行首
(5)\" \' \\ 则是输出“ ’ 、本身