算术操作符
+ - * / %
1.%操作符的两个操作数必须为整数。结果是两个数的余数。
2.除了%操作符之外,其他几个操作符可以用于整数和浮点数。
例:8 / 5 = 1; 8.0 / 5 = 1.6; 8%5 = 3......
移位操作符
<< 左移操作符 >> 右移操作符
左移规则:左边抛弃,右边补0。
例: int num = 8;
00000000 00000000 00000000 00001000 //num在内存中的二进制表示
00000000 00000000 00000000 000010000 //num左移一位后的二进制结果
右移规则:左边用该原值的符号位填充,右边丢弃。(算术移位)
例: int num = -1
11111111 11111111 11111111 11111111 //num在内存中的二进制表示
11111111 11111111 11111111 111111111 //num右移一位后的二进制结果
位操作符
(1) & 按位与 1与任何数相与都为任何数
(2) | 按位或 1与任何数相或都为1
(3) ^ 按位异或 相同为0,不同为1
(注:他们的操作数必须是整数 且 所有的位操作皆是以该数的二进制形式的补码进行运算)
赋值操作符 =
例:int a = 4;
int x = 5;
int y = 10;
a = y = x +3; // C 语言中允许连续赋值,但不建议这样做
可以写成 : y = x + 3;
a = y;
复合赋值符
+= -= *= /= %= >>= <<= &= |= =
例:{ int x = 5; { int x = 5; ...
x = x + 5; x = x * 5; ...
x += 5; } x *= 5; } ...
单目操作符
! 逻辑反操作 例:int a = 0; printf ("%d\n",!a); //输出 a = 1
-
+
& 取地址 例:int arr[5] = {1,2,3,4,5}; printf ("%p\n",&arr); //数组的地址
sizeof 操作数的类型长度 例:int a = 5; printf ("%d\n",sizeof(a)); //整形长度为4个字节
~ 对一个数的二进制按位取反
-- 前置、后置-- 例: int a = 5; int x = --a; // a先自减1,然后使用。x为4.。。。int y = a--; //a先使用,然后自减1. y为4
++ 前置、后置++ 例: int a = 5; int x = ++a; // a先自加1,然后使用。x为6.。。。int y = 5++; //a先使用,然后自加1. y为6
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
关系操作符
> >= < <= != ==
(注:== 用于测试“相等”。。 = 用于赋值)
逻辑操作符
&& 逻辑与 || 逻辑或
例: int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++ && ++b && d++;
printf("a = %d\nb = %d\nc = %d\nd = %d\ni = %d\n", a,b,c,d,i);
system("pause");
return 0;
} //输出结果为 1 2 3 4 0
int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++ || ++b || d++;
printf("a = %d\nb = %d\nc = %d\nd = %d\ni = %d\n", a,b,c,d,i);
system("pause");
return 0;
} //输出结果为 1 3 3 4 1
条件操作符
exp1 ? exp2 : exp3
例:If (a > 5)
b = 3; 转换成条件表达式为: b = a > 5 ? 3 : -3
else
b = -3;
逗号表达式
exp1,exp2,exp3,exp4,...(从左向右依次执行,整个表达式的结果是最后一个表达式的结果)
例: int main()
{
int a = 1;
int b = 2;
int c = (a > b, a = b + 10, a, b = a + 1);
printf("c = %d\n",c);
return 0;
} //输出结果为 C=13