运算符笔记,交换函数的三种算法

一、运算符大致分为:

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;

	} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值