算术操作符
+ - * / %
1.除了%操作符,其他操作符都可以作用于整数和浮点数。
2.%操作符的两个操作数必须都是整数。
3. / 操作符作用于整数,则执行整数除法,只要其中一个数是浮点数就执行浮点数除法。
//int main()
//{
// int a = 10;
// int b = 20;
// printf("%d %d %d %d\n", a + b, a - b, a*b, a / b);
// double c = 10.0 / 20;
// printf("%lf\n", c);
// system("pause");
// return 0;
//
//}
移位操作符
<<左移
1.将整数的32位二进制数整体向左移,左边丢失,右边补0
2.在计算机中操作的都是二进制数的补码
//int main()
//{
// int a = 5;
// //0000000000000000000000000000000101
// int a1 = -5;
// //1000000000000000000000000000000101--源码
// //1111111111111111111111111111111010--反码
// //1111111111111111111111111111111011--补码
// int b = a << 1;
// //0000000000000000000000000000001010
// //b=10;
// int c = a1 << 1;
// //1111111111111111111111111111110110--c的补码
// //1000000000000000000000000000001001--c的补码的反码
// //1000000000000000000000000000001010--c的源码
// //c=-10;
// printf("%d \n", b);
// printf("%d \n", c);
// system("pause");
// return 0;
//}
>> 右移
将整数的32位二进制数整体向右移,右边丢失,左边补符号位
//int main()
//{
// int a = 5;
// //0000000000000000000000000000000101
// int a1 = -5;
// //1000000000000000000000000000000101--源码
// //1111111111111111111111111111111010--反码
// //1111111111111111111111111111111011-补码
// int b = a >> 1;
// //0000000000000000000000000000000010
// //b=2
// int c = a1 >> 1;
// //1111111111111111111111111111111101--c的补码
// //1000000000000000000000000000000010--c的源码的反码
// //1000000000000000000000000000000011--c的源码
// //c=-3;
// printf("%d \n", b);
// printf("%d \n", c);
// system("pause");
// return 0;
//}
位操作符
& 按位与
| 按位或
^ 按位异或
操作的数必须是整数
//int main()
//{
// int a = 5;
// //00000000000000000000000000000101
// int b = 6;
// //00000000000000000000000000000110
// int c = a & b;
// //00000000000000000000000000000100
// //4
// int c1 = a | b;
// //00000000000000000000000000000111
// //7
// int c2 = a ^ b;
// //00000000000000000000000000000011
// //3
// printf("%d %d %d\n", c,c1,c2);
// system("pause");
// return 0;
//}
赋值操作符 =
复合赋值符
+= -= *= /= %= >>= <<= &= |= ^=
单目操作符
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~对一个数的二进制按位取反
– 前置、后置–
++前置、后置++
* 间接访问操作符(解引用操作符)
(类型)强制类型转换
//int main()
//{
// /*int a = 5;
// printf("%d \n", !a);
// int b = 0;
// scanf("%d", &b);
// printf("%d\n",b);
// printf("%d\n", sizeof b);*/
// //int a = 5;
// 00000000000000000000000000000101
// //int b = ~a;
// 11111111111111111111111111111010--b的补码
// 10000000000000000000000000000101--补码的反码
// 10000000000000000000000000000110--b的源码
// -6
// /*printf("%d\n", b);*/
// //int a = 5;
// //int b = a++;
// //int b1 = ++a;
// //printf("a=%d b=%d b1=%d\n", a,b, b1);
// /*int a = 10;
// int* pa = &a;
// printf("%d \n", *pa);*/
// system("pause");
// return 0;
//}
关系操作符
> >= < <= != ==
//int main()
//{
// int a = 10;
// //==常量写在左边,变量写在右边,不容易出错
// if (10 == a)
// printf("%d \n", a);
// system("pause");
// return 0;
//}
逻辑操作符
&& || !
1.&& 全真为真,只要有一个假都为假,第一个为假就不用看后面的;
2.|| 有一个真就为真,后面的不用看;
条件操作符
表达式1? 表达式2:表达式3;
//int main()
//{
// int a = 10;
// int b = 20;
// int max = a > b ? a : b;
// printf("%d\n", max);
// system("pause");
// return 0;
//}
逗号表达式
表达式1,表达式2,表达式3;
//int a = 1;
//int b = 2;
//int c = (a > b, a = b + 10, a, b = a + 1);
//c=13//从左向右看表达式,但是由最后一个表达式决定c的值。
下标引用操作符
[] 操作数为两个:数组名+数组个数值;
()函数调用操作符
() 操作数为多个:函数名和传递的参数;
.结构体.成员名
-> 结构体指针->成员名
//struct Stu
//{
// char name[20];
// int age;
// char sex;
//};
//void print(struct Stu tmp)
//{
// printf("%s %d %c\n", tmp.name, tmp.age, tmp.sex);
//}
//void print1(struct Stu* tmp)
//{
// printf("%s %d %c\n", tmp->name, tmp->age, tmp->sex);
//}
//int main()
//{
// struct Stu s = { "zhangsan",20,'M' };
// print(s);
// print1(&s);
// system("pause");
// return 0;
//}