8-运算符
一.算数运算符
int a = 3,b = 2;
int c = a + b;
注意:
/ 若是两边的数据都是整数的话,默认为整除。⼩数舍掉.
% 要求两边的运算符号⼀定要全部都是整数。否则,系统提示错误
示例代码:
int a = 0,b = 0;
int sum = 0;
printf("please input two data : ");
scanf("%d%d",&a,&b);
sum = a + b;
printf("a + b = %d\n",sum);
sum = a - b;
printf("a - b = %d\n",sum);
sum = a * b;
printf("a * b = %d\n",sum);
sum = a / b;
printf("a / b = %d\n",sum);
sum = a % b;
printf("a %% b = %d\n",sum);
二.⾃增和⾃减运算符
int a = 100;
int b = 0;
b = ++a;
b = --a;
规则: 前置++,先做加法运算,在赋值
b = a++;
b = a--;
规则: 后置++ 先进⾏赋值操作,在++
三.关系运算符
(1)C语⾔中规定,关系表达式值只有两个 0 (假)和 1 (真)。
(2)=和==不同,=表示赋值操作,==表示逻辑判断是否相等。
(3)⼀般C语⾔中定义,0为假,⾮0为真。
#include <stdio.h>
int main()
{
int data = 0;
printf("please input a data : ");
scanf("%d",&data);
printf("data > 30 = %d\n",data > 30);
printf("data == 30 = %d\n",data == 30);
printf("============================\n");
printf("data = 800 : %d\n",data = 800);
printf("data != 800 : %d\n",data != 800);
printf("============================\n");
printf("10 < data < 20 : %d\n",10 < data < 20);
return 0;
}
运行结果:
please input a data : 20 10
data > 30 = 0
data == 30 = 0
============================
data = 800 : 800
data != 800 : 0
============================
10 < data < 20 : 1
四.逻辑语运算符:
1.逻辑与&&
规则:都真则真,⼀假则假
短路特性:表达式 1 为假,则不会执⾏表达式 2
示例:
int a = 10,b = 20;
int ret = a > b && a;
2.逻辑或||
规则:都假则假,⼀真则真
短路特性:表达式 1 为真,则不会执⾏表达式 2
示例:
int a = 10,b = 20;
int ret = a > b || a;
#include <stdio.h>
int main()
{
int a = 0,b = 0;
int ret = 0;
printf("please input two data : ");
scanf("%d%d",&a,&b);
ret = a > b || a != 30;
printf("ret = %d\n",ret);
return 0;
}
运行结果:
please input two data : 20 10
ret = 1
示例代码2:
#include <stdio.h>
int main()
{
int a = 7,b = 9,c = 1;
int ret = 0;
ret = a > b && c ++;
printf("ret = %d c = %d\n\n",ret,c);
printf("+++++++++++++++++++++++++\n");
ret = a < b && c ++;
printf("ret = %d c = %d\n\n",ret,c);
printf("========================================\n");
c = 1;
ret = a > b || c ++;
printf("ret = %d c = %d\n\n",ret,c);
printf("+++++++++++++++++++++++++\n");
ret = a < b || c ++;
printf("ret = %d c = %d\n\n",ret,c);
return 0;
}
运行结果:
ret = 0 c = 1
+++++++++++++++++++++++++
ret = 1 c = 2
========================================
ret = 1 c = 2
+++++++++++++++++++++++++
ret = 1 c = 2
要求⼤家⽤笔算出下列 printf 输出的结果
int value = 0;
int a = 0;
int b = 1;
value = a && b;
printf("%d\n",value);
value = a || b;
printf("%d\n",value);
value = a++ && b ++;
printf("%d\n",value);
value = --a || b--;
printf("%d\n",value);
value = (a + b) || (a - b);
printf("%d\n",value);
value = (a * b) && (a + b);
printf("%d\n",value);
value = !a;
printf("%d\n",value);
printf("%d,%d,%d\n",a,b,value);
五.位运算符:
实例:
示例2:
#include <stdio.h>
int main()
{
unsigned char a = 10,b = 15;
unsigned char t = 0;
printf("a = %d b = %d\n",a,b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a = %d b = %d\n",a,b);
return 0;
}
示例3:
#include <stdio.h>
int main()
{
unsigned char reg = 3;
char a = -3;
reg = reg << 3;
printf("reg = %d\n",reg);
a = a << 3;
printf("a = %d\n",a);
a = a >> 6;
printf("a = %d\n",a);
return 0;
}
六.赋值复合运算符
#include <stdio.h>
int main()
{
int a = 20,b = 10;
a += b;
printf("a = %d\n",a);
a *= b;
printf("a = %d\n",a);
return 0;
}
七. 逗号运算符和三⽬运算符
1.逗号运算符格式:
ret = 表达式1,表达式2,表达式3,....,表达式n
功能:按顺序执⾏表达式,并将表达式n的结果,作为整个表达式的值赋值给ret。在所有的运算符中,逗号表达式的优先级最低
float x=10.5, y=1.8, z=0;
z = (x+=5, y = x+0.2) ;
z 赋值为15.7, x赋值为15.5, y赋值为15.7
z = (x=y=5, x +=1) ;
z 赋值为6, x赋值为6, y赋值为5
z = (x=5, y = 6, x+y ) ;
z赋值为11, x赋值为5, y赋值为6
z = (z=8, x=5, y = 3) ;
z 赋值为3, x赋值为5, y赋值为3
2.三目运算符格式:
ret = 表达式1 ? 表达式2: 表达式3 ;
功能:判断表达式1是否为真,若是为真则执⾏表达式2.并把表达式2最终的结果复制给ret,否则,就执⾏表达式3,并把表达式3最终的结果复制给ret,
示例:
int a = 8,b = 2
ret = a > b ? a + b : a - b;
pritnf("ret = %d\n",ret);
#include <stdio.h>
int main()
{
int a = 10,b = 20;
int c = 0;
int ret = 0;
ret = a < b ? (c = a,a = b,b = c) : a * b;
printf("result = %d\n",ret);
return 0;
}
练习:
定义三个整数a,b,c,⽤户从键盘输⼊赋值,从⼩到⼤,排列,然后输出 [不允许使⽤if语句]最终输出,a保存最值保存其次,c保存最⼤值
例如 :
⽤户输⼊ a = 30,b = 20,c = 10. 要求最终保存的结果为 a = 10,b = 20,c = 30.
八.运算符优先级
1.运算符优先级规律:
初等单⽬⼀⼆级 // 初等运算符和单⽬运算符分别是第 1、2 优先级
乘除求余加减移 // 这句⾥⾯的运算符全归为算术运算符,移表示移位
关系等于不等于 // 关系运算符 ( >=)
按位与来异或或 // 位运算符优先级顺序:& -> ^->l 从左向右 从右向左 从左向右
逻辑与或条件弱 // 逻辑运算符优先级顺序:&&->||,后⾯跟着优先级⽐较低 (弱) 的条件运算符
赋值逗号⼀点破 // 赋值,逗号最低