C语言的类型
- 整数
- char、short、int、long、long long
- 浮点数
- float、double、long double
- 逻辑
- bool
- 指针
- 自定义类型
类型有何不同
- 类型名称:int、long、double
- 输入输出时的格式化:%d、%ld、%lf
- 所表达的数的范围:char<short<int<float<double
- 内存中所占据的大小:1个字节到16个字节
- 内存中的表达形式:二进制数(补码)、编码
sizeof
- 是一个运算符,给出某个类型或变量在内存中所占据的字节数
- sizeof(int)
- size(i)
- 是静态运算符,它的结果在编译时刻就决定了
- 不要在sizeof的括号里做运算,这些运算不会做的
整数
- char:1字节(8比特) -128~127
- short:2字节 -32768~32767
- int:取决于编译器(CPU),通常意义是”1个字“
- long:取决于编译器(CPU),通常意义是”1个字“
- long long :8字节
unsignned
- 如果一个字面量常数想要表达自己是unsigned,可以在后面加u或U
- 255U
- 用I或L表示long(long)
- *unsigned的初衷并非扩展数能表达的范围,而是为了做纯二进制运算,主要是为了移位
整数的输入输出
- 只有两种形式:int或long long
- %d:int
- %u:unsigned
- %ld:long long
- %lu:unsigned longlong
8进制和16进制
- 一个以0开始的数字字面量是8进制
- 一个以0x开始的数字字面量是16进制
- %0用于8进制,%x用于16进制
- 8进制和16进制只是如何把数字表达为字符串,与内部如何表达数字无关
- 16进制很适合表达二进制数据,因为4位二进制正好是一个16进制位
- 8进制的一位数字正好表达3位二进制
选择整数类型
- 没有特殊需要就选择int
浮点类型
浮点的输入输出
输出精度
- 在%和 f之间加上.n可以指定输出小数点后几位,这样的输出是做4舍5入的
- printf("%.3fn",-0.0049)
- printf("%.30fn",-0.0049)
- printf("%.3fn",-0.00049)
超过范围的浮点数
- printf输出inf表示超出范围的浮点数:+-无穷
- printf输出nan表示不存在的浮点数
浮点运算的精度
- 带小数点的字面量是double而非float
- float需要用f或F后缀来表明身份
选择浮点类型
- 没有特殊需要,只使用double
- 现在CPU能直接对double做硬件运算,性能不会比float差,在64位的机器上,数据存储的速度也不比float慢
字符类型
- char是一种整数,也是一种特殊字符:字符。这是因为:
- 用单引号表示的字符字面量:‘a’,‘1’
- ‘’也是一个字符
- printf和scanf里用%c来输入和输出字符
字符的输入输出
- 如何输入'1'这个字符给char c?
scanf("%C",&C); scanf("%d",&i); c=i
- '1'的ASCII码是49,所以当c==49时,他代表'1'
逃逸字符
- 用来表示无法印出的控制字符或特殊字符,它由一个反斜杠" "开头,后面跟上另一个字符,这两个字符合起来,组成了一个字符
自动类型转换
- 当运算符的两边出现不一致的类型时,会自动转换成较大的类型
- 大的意思是能表达的数的范围更大
- char-short-int-long-long-long
- int-float-double
- 对于printf,任何小于int的类型会被转换成int;float会被转换成double
- 但是scanf不会,要输入short,需要%hd
强制类型转换
- 要把一个量强制转换成另一个类型(通常是较小的类型),需要:
- (类型)值
- 比如:
- (int)10.2
- (short)32
- (类型)值
- 注意这时候的安全性,小的变量不总能表达大的量
- (short)32768
- 只是从那个变量计算出了一个新的类型的值,它并不改变那个变量,无论是值还是类型都不改变
- 强制类型转换的优先级高于四则运算
c double a = 1.0; double b = 2.0; int i = (int)a/b; int i =(int)(a/b);
6.2其他运算
bool
c #include <stdbool.h>
- 之后就可以使用bool和true、false
逻辑运算
- 逻辑运算是对逻辑量进行的运算,结果只有0或1
- 逻辑量是关系运算或逻辑运算的结果
- 如果要表达数学中的区间,x>4&&x<6
- 判断一个字符c是否是大写字母
- c>='A'&& c<='Z'
- 优先级
- !>&&>||