字符类型
char 是一种整数,也是一种特殊的类型:字符
这是因为:用单引号表示的字符字面量: ‘a’ ,‘1’,
‘’ 也是一个字符
printf和scanf用%c来输入,输出字符
如何输入‘1’这个字符给 char c
scanf(“%c”,&c); → 1
scanf(“%d”,&i);c=i; →49
字符计算
char c=‘A’;
c++;
printf(“%c\n”,c);
int i=‘Z’-'A';
printf("%\n",i);
一个字符加一个数字得到ASCLL表9中那个数之后的字符
两个字符的减得到它们在表中的距离
大小写转换
字母在ASCLL表中是顺序排列的
大写字母和小写字母是分开排列的,并不在一起
'a'-'A'可以得到两段间的距离,于是
a+'a'-'A'可以把一个大写字母变成小写字母
a+'A'-'a'可以把一个小写字母变成大写字母
逃逸字符
用来表达无法印出来的控制字符或特殊字符,它由一个反斜杠符“\”开头,后面跟上另一个字符,这两个字符连起来组成一个字符
字符 意义
\b 回退一格(让下一个位置上的东西回到上一格不删除)
\t 到下一个表格位
\n 换行
\r 回车
\" 双引号
\' 单引号
\\ 反斜杠本身
\t 每行的固定位置
一个\t使得输出从下一个制表位开始,用\t才能使得上下两行对齐
自动类型转换
当运算符两边出现不一致的类型时会自动转换为较大类型
大的意思是能表达的数的范围更大
char→short→int→long→longlong
int→float→double
对自动转换类型
对于printf,任何小于int的类型会被转换成int,float会被转换成double
但是scanf不会,要输入short,需要%hd
强制类型转换
要把一个量转换成另一个类型,通常是转小的类型需要(只是从那个变量计算出了一个新的类型的值,它并不改变那个变量,无论是值还是类型都不改变)
(类型)值
- (int)10.2
- (short)32
注意此时的量的安全性,小的变量不用能表达大的量
如
- (short)32768
强制类型转换的优先级高于四则运算
bool
#include <stdbol.h>
之后就可以用 bool 和 true , false
逻辑运算
逻辑运算是对逻辑进行的运算,结果只有0或1
逻辑量是关系运算或逻辑运算的结算
运算符 描述 示例 结果
! 逻辑非 !a 如果a是true,结果是false
如果a是false,结果是true
&& 逻辑与 a&&b 如果a和b结果true果 就是true,否则就是false
|| 逻辑或 a||b 如果一个是true,结果是 true,两个都是false,结果 是false
- 如何判断一个字符是大写字符
- c>='A'&&c<='z'
!age<20 先做!age ,结果为0或1
单目运算符优先级高于双目运算符
!>&&>||
优先级 运算符 结合性
1 () 从左到右
2 ! + - ++ -- 从右到左(单目的+和-)
3 % * / 从左到右
4 + - 从左到右
5 < <= > >= 从左到右
6 == != 从左到右
7 && 从左到右
8 || 从左到右
9 = += -=
*= /= %= 从右到左
短路
逻辑运算为自左向右进行,如果左边的结果已经能够决定结果,就不会做右边的结果
对于&&,左边是false,就不做右边
对于||,左边是true时,就不做右边
不要把赋值包括复合赋值写进表达式
条件运算符
count = (count> 20) ? count -10 : count+ 10;
条件、条件满足时的值和条件不满足时的值
?前表示条件
?后表示条件满足时的值
:后表示条件啊满足时的值
条件运算符的优先级高于赋值运算符,但是低于其他运算符
条件运算符是自右向左运行的
逗号运算
逗号用来连接两个表达式,并以其右边的表达式的值作为它的结果。逗号的优先级是所有的运算符中最低的,所以它两边的表达式会先计算;逗号的组合关系是自左向右,所以左边的表达式会先计算,而右边的表达式的值就留下来作为逗号运算的结果。
逗号运算主要在 for 中使用