一、运算符大致分为:
1.算数运算符:+, -, *, /, ++, --
(区别前置自增自减和后置自增自减)
a=i++;//先把i的值(与其他运算符结合)赋值给a,i再自增;
a=++i;//i先自增,再把自增后的值(与其他运算符结合)赋值给a;
2.逻辑运算符:&&逻辑与,||逻辑或,!逻辑非
3.关系运算符:>,<,>=,<=,==,!=
4.赋值运算符 :=
5.位运算符:>>(右移降次除以2的次方),<<(左移升次乘2的次方),&(按位与),|(按位或)(有一则一),按位异或(^)(二进制中相同为0,不同为1)
~(取反)
val右移n个位 :val>>n-->val除以2的n次。
val左移n个位 :val<<n-->val乘2的n次。
总结为:左移乘2右移除2
注意不要混淆次方与按位异或的符号:次方一般使用pow()函数(引入头文件"math.h")或用*的形式,例如5的三次方一般写为pow(5,3)或者5*5*5.
位运算的应用:用位运算符判断奇偶(将这个数与(&)1(二进制0001))结果为0,该数是偶数;结果为1,该数是奇数。因为奇数2进制最后一位为1,偶数二进制最后一位为0 。
即:(val&1)==0------>偶数
(val&1)==1------>奇数
二、运算符优先级
三、交换函数:
1.引入中间变量法:
#include<stdio.h>
int main(){
int a=30;
int b=20;
int t;
t=a;
a=b;
b=t;
printf("a=%d,b=%d",a,b);
return 0;
}
运行结果如下:
2.不使用临时变量交换两个数的值:
#include<stdio.h>
int main(){
int a=30;
int b=20;
a=a+b;
b=a-b;
a=a-b;
printf("a=%d,b=%d",a,b);
return 0;
}
运行结果如下:
3.使用位运算交换两个数的值:
#include<stdio.h>
int main(){
int a=30;
int b=20;
a=a^b;
b=a^b;
a=a^b;
printf("a=%d,b=%d",a,b);
return 0;
}
运行结果如下:
四、练习:
1.逻辑运算符练习:计算2000以内的年份是不是闰年
#include<stdio.h>
#include<stdlib.h>//包含rand()函数
#include<time.h>//包含time()函数
int main() {
time_t t;
int i;
time(&t);//获取系统时间
srand(t);
int num = rand() % 2000;
if ((num % 4 == 0 && num != 100) || num % 100 == 0 && num % 400 == 0) {
printf("%d年是闰年", num);
}
else printf("%d年不是闰年", num);
}
运用了之前学习的获取随机值得算法,从系统获取随机值并判断该年份是否为随机值,当然有需要也可以从键盘获取年份,思想是一样的,利用判断语句和逻辑运算符判断是否为闰年。
2.关系运算符练习:从键盘输入两个整形,输出较大值
#include<stdio.h>
int main() {
int a, b;
scanf("%d,%d", &a, &b);
if (a > b) {
printf("%d", a);
}
else printf("%d", b);
return 0;
}
3.语句练习:从键盘输入三个整型,输出最大值
使用三目运算符输出最大值:
int main()
{
int a, b, c,max;
scanf("%d,%d,%d", & a, &b, &c);
max=a>b?a:b;
max=max>c?max:c;
printf("最大值为:%d",max);//可读性强,推荐使用
//printf("最大值为:%d", (a > b ? a : b) > c ? a : c);代码简洁但可读性不强
return 0;
}