- 操作符的分类
- 算数操作符 + - * / %
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { int n = 10 / 3; int m = 10.0 / 3; float z = 10.0 / 3; printf("%d %d %f\n", n, m,z);//3 3 3.333333 int ret = 10 % 3; printf("%d\n", ret);//1 return 0; }
- 移位操作符(整数转化为二进制以后再移位 )移位的位数不要写为负数
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { int a = 5; int b = a << 2; printf("%d\n", b);//20 return 0; } ------------------------------------------------------------------------------------------- #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { int a = -5; int b = a << 2; printf("%d\n", b);//-20 return 0; } ------------------------------------------------------------------------------------------- #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { int a = 5; int b = a >> 2; printf("%d\n", b);//1 return 0; } ----------------------------------------------------------------------------------------- #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { int a = -5; int b = a >> 2; printf("%d\n", b);//-2 return 0; }
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { int a = -1; int b = a << 1; printf("%d", b);//-2 return 0; }
- 位操作符(按二进制位操作) 相同的数异或结果为0;0异或任何数为原数。
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { int a = 7; int b = -5; int c = a & b; int d = a | b; int e = a ^ b; printf("%d %d %d", c, d, e);//3 -1 -4 return 0; }
- 赋值操作符 (可以连续赋值)
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { int a = 99; int b = 0; b = a; printf("%d", b);//99 return 0; }
- 单目操作符(sizeof(int)必须带有括号,sizeof(a)可以不带有括号)
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <math.h> int main() { int a = -8; float b = -0.2678; printf("%d %f", abs(a), fabs(b));//8 0.267800 return 0; }
- ++和 --操作符
- *间接访问操作符(和指针搭配使用)
- (类型)强制类型转化
- 关系操作符
- 逻辑操作符 &&全为真才为真,||一个为真即为真
- 条件操作符(三目操作符)
- 逗号表达式
- 下标引用操作符,函数调用和结构成员访问操作符
- %1d常用于一位整数的输入,与scanf()配合使用。
- 表达式求值 :隐式类型转换 (隐式类型转换,也称自动类型转换,是指不需要书写代码,由系统自动完成的类型转换。包括整型提升和算数转换)(显式类型转换,也称强制类型转换,是指必须书写代码才能完成的类型转换。):案例整型提升 (整型提升是按照变量的数据类型的符号位来提升的) 只要有char和short就会有整型提升为int类型
算数转换#include<stdio.h> int main() { char a = 5; //00000000000000000000000000000101 //截断 //00000101 char b = 126; //00000000000000000000000001111110 //01111110 //整型提升 //00000000000000000000000000000101 //00000000000000000000000001111110 //00000000000000000000000010000011 //截断 //10000011 //整型提升 //11111111111111111111111110000011(补码) //10000000000000000000000001111100 //10000000000000000000000001111101(原码) char c = a + b; printf("%d\n", c); return 0;//-125 }
- 操作符的属性
- 控制求值顺序的操作符:&& || 三目操作符 逗号表达式
- 表达式要有唯一的计算路径,唯一解(问题代码)
//错误代码 int fun() { static int count = 1; return ++count; } int main() { int answer; answer = fun() - fun() * fun(); printf( "%d\n", answer);//输出多少? return 0; }