一、算术运算符:+ - * / % ++ - -
求余运算(%模运算):符两边必须都是整型数据。
取余运算使用场景:当要控制一个变量的取值在0~N之间的时候可以使用取模运算。只能是整数取模。模运算的正负只和第一个数的正负有关。
逗号运算符:是用来连接表达式的。逗号运算符的运算结果是最后一个表达式的值。int a,b;b=(a=5,a++,a*5);//结果b=30
注意:++或者--在前,先执行++或--,例如:b = ++a;等价于a = a+1;b = a;。++或--在后,后执行++或者--。对于除法,如果两个数都是整数,他们的结果也必然是整型的。
Demo:
#includeint main(int argc, const char * argv[]) { //输入时间的秒数,然后转换为多少分多少秒输出 //500 8分/20秒 //1.定义变量保存用户输入的整数 int time; //2.接收用户输入的整数 printf("请输入:\n"); scanf("%d",&time); //3.换算成分秒 int minute = time / 60;//分钟 8 int second = time % 60;//秒数 //4.输出到屏幕 printf("%d分/%d秒\n",minute,second); return 0;}
二、复合运算符:+= -= *= /= %=
位运算符&、|、~、^、<<、>> 是对二进制的操作
按位与&:对应位一假则假
按位或|:对应位一真则真
按位异或^:对应位不同返回1,相同返回0。
多个整数异或结果和顺序没有关系。
相同整数按位异或结果为0。
任何整数按位异或上0结果还是你那个整数。
取反~:0变1 1变0 一个数的负数:取反加1
左移<<:a << n 把整数a的二进制往左变移n位。
左移多少位就是乘以2的多少次方。
左移有可能改变数值的正负性。
使用场合:当要计算某个数乘以2的多少次方的时候有左移效率最高。
右移>>:右移多少位就是除以2的多少次方,保持符号位不变。
使用场合:当要计算某个数除以2的多少次方的时候有右移效率最高
sizeof可以用来计算一个变量、常量、数据类型所占用的存储空间的大小。
注意:sizeof是一个运算符,不是一个函数。int num = sizeof(float); sizeof(10); sizeof 10;当计算的是数据类型的时候小括号不能省。
三、逻辑运算符:&&(逻辑与) ||(逻辑或) !
BOOL数据类型,是一种表示非真即假的数据类型,BOOL类型的变量只有YES和NO两个值。在C语言里,认为非0即为真。
逻辑运算符,表达式的值是一个BOOL类型。
Demo1:
#includeint main(int argc, const char * argv[]) { int x,y,z; x = y = z = 0; ++x || ++y || ++z; printf("%d %d %d\n",x,y,z);//1 0 0 return 0;}
控制台打印:
1 0 0
Program ended with exit code: 0
Demo2:
#includeint main(int argc, const char * argv[]) { int x,y,z; x = y = z = 0; ++x || (++y && ++z); printf("%d %d %d\n",x,y,z);//1 0 0 return 0;}
控制台打印:
1 0 0
Program ended with exit code: 0
Demo3:
#includeint main(int argc, const char * argv[]) { int x,y,z; x = y = z = 0; (++x || ++y) && ++z; printf("%d %d %d\n",x,y,z);//1 0 0 return 0;}
控制台打印:
1 0 1
Program ended with exit code: 0
四、关系运算符:
(比较运算)> >= < <= == != 表达式的值是一个BOOL类型
注意:在以后开发当中但凡遇到比较一个变量等于或者不等于某一个常量的时候,把常量写在前面。
五、运算符的优先级:从高到低
优先级 | 描述 | 运算符 |
1 | 括号 | ()、[] |
2 | 正负号 | +、- |
3 | 自增自减,非 | ++、--、! |
4 | 乘除,取余 | *、/、% |
5 | 加减 | +、- |
6 | 移位运算 | <<、>>、>>> |
7 | 大小关系 | >、>=、<、<= |
8 | 相等关系 | ==、!= |
9 | 按位与 | & |
10 | 按位异或 | ^ |
11 | 按位或 | | |
12 | 逻辑与 | && |
13 | 逻辑或 | || |
14 | 条件运算 | ?: |
15 | 赋值运算 | =、+=、-=、*=、/=、%= |
16 | 位赋值运算 | &=、|=、<<=、>>=、>>>= |
六、判断奇偶性
Demo1:
#includeint main(int argc, const char * argv[]) { //判断一个数的奇偶性 int temp; printf("请输入一个数temp:\n"); scanf("%d",&temp); if (temp % 2 == 0) { printf("偶数\n"); }else{ printf("奇数\n"); } return 0;}
控制台输出:
请输入一个数temp:
21
奇数
Program ended with exit code: 0
请输入一个数temp:
80
偶数
Program ended with exit code: 0
Demo2:
#includeint main(int argc, const char * argv[]) { //判断一个数的奇偶性 int temp; printf("请输入一个数temp:\n"); scanf("%d",&temp); //三目运算符 (temp % 2 == 0) ? printf("偶数\n") : printf("奇数\n"); temp % 2 ? printf("奇数\n") : printf("偶数\n"); return 0;}
控制台输出:
请输入一个数temp:
78
偶数
偶数
Program ended with exit code: 0
请输入一个数temp:
33
奇数
奇数
Program ended with exit code: 0
Demo3:
#includeint main(int argc, const char * argv[]) { //判断一个数的奇偶性 int temp; printf("请输入一个数temp:\n"); scanf("%d",&temp); //位运算符 /* 9 1001 11 1011 10 1010 12 1100 特点:奇数的最后一位都是1,偶数都是0 1000 0001 ------- 0000 */ if ((temp & 1) == 1) { printf("奇数\n"); }else{ printf("偶数\n"); } return 0;}
控制台输出:
请输入一个数temp:
33
奇数
Program ended with exit code: 0
请输入一个数temp:
34
偶数
Program ended with exit code: 0
七、大写字母转小写
Demo:
#include//大写字母变为小写的算法:char lower(char myC){ if (myC >= 'A' && myC <= 'Z') { return myC + ('a' - 'A');//myC + 32 } return myC;}int main(int argc, const char * argv[]) { char ch = 'a'; printf("输入字符ch:\n"); scanf("%c",&ch); printf("%c\n",lower(ch)); return 0;}
控制台输出:
输入字符ch:
A
a
Program ended with exit code: 0