一.数学计算:1.加法 整数,浮点,字符类型(可以按照ASCII码进行)操作中有一个是浮点,结果就是浮点涉及多个不同数据类型的算术运算时,编译器会按照特定规则将数据转换为相同的类型,较低级别的类型-较高级别类型--以避免数据丢失char(8位)short int(16位)int(32位)longlong(64位)signedunsignedintfloatdouble(注意数据丢失)int 2*float 3.14 float 6.282.减法 -同上3.乘法 *同上4.除法 /整数相除,结果依旧是整数,舍弃小数例 int a 10 ;int b 3 float c a/b 3int a 10 ;int b 3 float c (float)a/b 3.33强制转换小数除数不能为0,为0报错5.取余仅用整数类型,不能用浮点型取余的余数的符号和被除数一致,也就是左边的作用:判断奇偶,对2取余循环中的记数运算符自增:(前置后置)int i10printf(%d\n,i)前置自增,输出11printf(%d\n,i)后置自增,输出11,然后i变成12int x 5int y x x 先返回x,在加1 先加1在返回xy 57二.逻辑判断:判断真假1.关系运算符:2.逻辑运算符:逻辑与 且例:10010010:92 1 ,为真,都不是0逻辑或|| 或逻辑非!3.短路求值:当第一个条件确定最终结果时,后面的条件不被计算ab a已经错了,不用看b三.位运算:1.按位与(对应位都为1时,结果为1,否则为0)例:10010010 0000 920用作:清零某些位,掩码检查某一位是否为10xFFFF0000是一个32位十六进制数高16位1111 1111 1111 1111即0xFFFF低16位0000 0000 0000 0000即0x0000int a 0x12345678printf(%x\n,a)2.按位或|(对应为中至少有一个为1结果为1)作用设置特定位多少位为1例:1001|0010 1011 9|20a 6;b3; r a|b 70110 0011 01113.按位异或:^(1,0不一样就是1,一样就是0)作用翻转和交换操作例:1001^0010 1011int a6; //0110int b7; //0111a a^b; //0001b a^b;a a^b;printf(%d %d\n, a, b);4.取反 ~(每一位取反 0变1,1变0)char a 9作用电频翻转生成补码常见于计算负数例:00001001取反11110110int a 6a ~a1 a的结果为-60000 0110 -取反补码11111001 1- 11111010 有符号的整数通常补码存储1为-补码00000101补码加1 00000110 加上符号就为-65.左移 将操作数的位左移指定的次数右侧用0补齐左移相当于乘以2的幂次作用快速乘以2的幂性能敏感程序n1 n*2char a 9 00001001例:a 1 00010010a 2 001001006.右移 (相当于除以2的幂无符号数补0有符号数补符号位,这里的补指的是移动后需要补的数)例:10010010-1 二进制 1111 1-0001-补码取反1110-1-1111十六进制 0xFF 1111-F7.优先级和结合性位运算符的优先级相比于其他运算符较算术但高于逻辑运算符第2位设置为1:int n 5 (0100) ;n n|(11);第二位清除为0int n7(0111); nn~(11);检查 第三位是否为1int n5;//0101if(n(12)){printf(“是1”)}else{printf(是0)}四.条件判断1.if(){}2.if(){}else{}3.if(){} else if(){} else{} 当一个条件成立后后续将不会在检查1.上面可用范围判断数值布尔switch不行只能整数字符枚举2.有大量分支时swich效率更高看起来简洁一些if else效率低3.if else不需要break,4.else处理默认情况default处理没有匹配的情况4.枚举固定值switch(expression){case value 1://当expression等于value1时执行break;case value 2://当expression等于value2时执行break;default://没有匹配的就执行这个}fall through现象当某一个分支没有出现break时就会继续向下执行如果一直没有遇到break,则执行后面全部代码五.循环1.循环结构和作用简化代码减少重复重复任务时可以高效简洁自动化重复任务遍历数组打印序列动态控制执行次数提高程序效率便于处理集合数据灵活的控制流2.for 循环for初始化条件迭代 {循环体}for(i 0;i5;i){printf(i%d/n,i);}初始化和迭代可以没有循环体中需要有3.嵌套for循环遍历数组循环4.for循环遇到break循环会立即终止跳转到该循环外continue 遇到continue时不执行continue后面的语句直接又进行下一次循环5.常见问题1.无限循环2.循环变量范围错误3.修改循环变量6.while循环while条件表达式{循环体}int i 0;while(i5){printf(i%d/n,i);i;}适合不限循环不确定某状态次数的条件判断例子当一个传感器的状态是开启时就执行不是开启就不执行接收数据也可以while(1){} 这个1表示永远为真还可以将表达式改成函数while不限次数用for:对次数有要求用7.do while先执行一次循环体无论是否为真都会执行一次检查条件在第一次执行循环体后才会检查while中的条件循环结束或继续如果条件为真继续执行循环体如果为假跳出区别一个先做一遍在判断一个先判断在做do{printf(“打印”);i}while(i5);适合菜单先展示菜单用户反复操作菜单知道用户选择退出\t是美化字段