操作符有:
单目操作符,双目操作符,三目操作符
又分为算术操作符,关系操作符, 条件操作符, 逻辑操作符, 位操作符, 自增操作符,赋值操作符
双目操作符
有 2 个操作数的运算符称为双目操作符
关系操作符,逻辑操作符, 位操作符,赋值操作符,算术操作符
关系操作符
> (大于运算符); < (小于运算符); >= (大于等于运算符) ; <= (小于等于运算符); == (相等运算符); != (不相等运算符)
非0全为真,只有 0 为假,当一个函数的返回值只需要判定真和假,可以使用布尔类型(bool)作为返回值,因为布尔类型(bool)只有 2 种值,真 和 假,使用布尔类型(bool)需要调用头文件 stdbool.h,bool类型是 C99 出现的
关系操作符得到的值 只有 真 (1)和 假 (0)
a = 3;
b = 6;
1. a > b; // a 为左操作数,b 为有操作数,有 2 个操作数,为双目运算符
// 3 > 6 假,表达式为 0
3. a < b; // 3 < 6 真,表达式为 1
4. a >= b; // C语言中大于等于的表示方法与数学中的表示方法有所不同
5. a <= b;
6. a == b; // 这里要注意相等运算符要 2 个等号, 一个等号是赋值操作
7. a = b; // 赋值,将 b 赋给 a,这赋值运算符
8. a != b;
逻辑操作符
!:逻辑取反运算符(改变单个表达式的真假)
注意:逻辑取反运算符为单目操作符,我这里为了方便一点就写在了双目操作符里
&&: 与运算符 就是并且的意思(全为真,表达式才为真)
注意:左操作数为假时,右操作数就不执行了
||: 或运算符,就是或者的意思(只要一个为真,表达式就为真)
注意:左操作数为真时,右操作数就不执行了
与操作符的图形解释
或操作符的图形解释
位操作符
位操作符有:左移运算符(<<),右移运算符(>>),按位或运算符(|),按位与运算符(&),按位异或运算符(^),按位取反运算符(~),这些运算符都是对二进制进行操作
移位又分为算术移位和逻辑移位
注意:按位取反运算符为单目操作符,我这里为了方便一点就写在了双目操作符里
#include <stdio.h>
int main()
{
short a = 3; // 0000 0000 0000 0011
short b = 5; // 0000 0000 0000 0101
// 最高位为 0 为正数
// 最高位为 1 为负数
printf("%hd<<%hd=%hd\n", a, b, (a<<b));// 左移操作
// 最高位保持不变,剩余的全部向左移动 b 位,在后面补零
// 0000 0000 0000 0011 移动1位 0000 0000 0000 0110 移动2位 0000 0000 0000 1100 移动3位 0000 0000 0001 1000,后面我就不演示了,相信大家都已经明白了
//再以负数举个例: -1: 1000 0000 0000 0001
// 移动1位 1000 0000 0000 0010 移动2位 1000 0000 0000 0100
printf("%hd>>%hd=%hd\n", a, b, (a>>b)); //右移操作
printf("%hd|%hd=%hd\n", a, b, (a|b));// 只要对应的二进制位有1个及以上的 1,该位就为 1
printf("%hd&%hd=%hd\n", a, b, (a&b));// 只有对应的二进制位都为 1 时,该位才为 1
printf("%hd^%hd=%hd\n", a, b, (a^b));// 只有对应的二进制位不相同时,该位才为 1
printf("~%hd=%hd\n", a, ~a); //取反运算符是对补码进行操作,最高位保持不变,其余位由 1变0, 0变1
//正数的原码,反码,补码都相同
//负数的反码是原码取反(最高位符号位不变),补码是反码加1得到的
return 0;
}
这是上面程序的运行结果,如果还是不明白的话,可以用计算机看对应的二进制数,一个一个对
这是电脑自带的计算机,我这的快捷键是 Fn+F12,找不到的话也可以直接搜索
赋值运算符
在变量创建的时候给⼀个初始值叫初始化,在变量创建好后,再给⼀个值,这叫赋值
赋值操作符 = 是⼀个随时可以给变量赋值的操作符,赋值操作符比较简单,这里我就不解释了
c = b = a+3;//连续赋值,从右向左依次赋值的
算术操作符
+:用来完成加法的运算符
-:用来完成减法的运算符
*:用来完成乘法的运算符
/:用来完成除法的运算符
%:用来完成取模运算的运算符
#include <stdio.h>
int main()
{
int a = 5;
int b = 3;
printf("%d+%d=%d\n", a, b, a + b);
printf("%d-%d=%d\n", a, b, a - b);
printf("%d*%d=%d\n", a, b, a * b);
printf("%d/%d=%d\n", a, b, a / b);
printf("%d/%d=%d\n", a, b, a*1.0 / b);// 小数默认就是双精度浮点型(double),单精度浮点型(float)要在后面加f
printf("%d/%d=%f\n", a, b, a / b);
printf("%d/%d=%f\n", a, b, a * 1.0f / b);
//如果运算数这没有小数,那么会进行整数除法
//如果希望得到浮点数的结果,两个运算数必须⾄少有⼀个浮点数,这时C语⾔就会进⾏浮点数除法
printf("%d/%d=%lf\n", a, b, a / b);
printf("%d/%d=%lf\n", a, b, a*1.0 / b);
printf("%d%%%d=%d\n", a, b, a % b);//取模运算符只能对整型取模,符号与操作数的正负一致
return 0;
}
这是运行结果
三目操作符
条件操作符
exp1 ? exp2 : exp3
条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;如果
exp1 为假, exp3 计算,计算的结果是整个表达式的结果
// 这是找最大值的代码程序
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int m = a > b ? a : b;
printf("%d\n", m);
return 0;
}
这是运行结果