第五章 函数与位运算

1、函数

“函数”可以将实现了某一功能,并需要反复使用的代码包装起来形成一个功能模块(即写成一个“函数”),那么当程序中需要使用该功能时,只需要写一条语句,调用实现该功能的“函数”即可。

返回值类型 函数名(参数1类型 参数1名称,参数2类型 参数2名称) 
{
     
}
  1. 如果函数不需要返回值,则“返回值类型”可以写“void”
  2. 调用函数
函数名(参数1,参数2,...)

对函数的调用,也是一个表达式。函数调用表达式的值,由函数内部的return语句决定。
return语句语法如下:

return 返回值;

如果函数返回值类型为“void”,return语句直接写:

return;
  1. 函数的声明。一般来说函数的定义必须出现在函数调用语句之前。函数的调用语句前面有函数的声明即可,不一定要有定义!函数声明:
返回值类型 函数名(参数1类型 参数1名称,参数2类型 参数2名称......);
int Max(int a,int b);
double Sqrt(double);
double Distance(double,double,double,double);
参数名称可以省略。
void FunctionB();  //声明
void FunctionA(){
	....
	FunctionB();
	....
	return;
}
void FunctionB(){
	....
	FunctionA();
	....
	return;
}

main函数。c/c++程序从main函数开始执行,执行到main中的return则结束。

  1. 函数参数的传递。形参是实参的一个拷贝,且形参的改变不会影响到实参。除非形参类型是数组。
    一维数组作为形参时的写法:
类型名 数组名[ ]
void PrintArray(int a[]){
	
}

数组作为函数参数时,是传引用的,即形参数组改变了,实参数组也会改变。
二维数组作为形参的写法:二维数组作为形参时,必须写明数组有多少列,不用写明有多少行。

void PrintArray(int a[][5]){
	
}

a[i][j]的地址:数组的首地址+i×N×sizeof(a[0][0])+j×sizeof(a[0][0])(N是数组列数)
形参数组的首地址就是实参数组的首地址

2、递归

● 一个函数,自己调用自己。

int Factorial(int n)
{
	if(n<2)
		return 1;  //终止条件 
	else
		return n*Factorial(n-1); 
}

递归函数需要有终止条件,否则就会无穷递归导致程序无法终止甚至崩溃。

3、位运算

3.1、常见的位运算

用于对整数类型(int、char、long等)变量中的某一位(bit),或者若干位进行操作。

  1. 判断某一位是否为1
  2. 只改变其中某一位,而保持其他位都不变
&|^~<<>>

●&:对应的两个二进制位均为1时,才为1,否则为0。通常用来将某变量中的某些位清0且同时保留其他位不变。也可以用来获取某变量中的某一位。
● |:两个二进制位有一个为1时,就为1。通常用来将某变量中的某些位置置位1且其他位不变。
● ^:两个二进制位不相同时,才为1,否则为0。通常将某变量中的某些位取反,且保留其他位不变。
● :按位非“,将操作数中的二进制位0变为1,1变为0
● a<<b:将a各二进制全部左移b位后得到的值。左移时,高位丢弃,低位补0。a的值不因运算而改变。左移1位,等于乘以2,左移n位,等于乘以 2 n 2^n 2n
● a>>b:将a各二进制全部右移b位后得到的值。右移时,移出最右边的位就被丢弃。a的值不因运算而改变。右移n位,相当于左操作数除以 2 n 2^n 2n,
-25>>4=-2、-2>>4=-1、18>>4=1

3.2、优先级

在这里插入图片描述

3.3、常见操作

  • 去掉最后一位:x>>1
  • 在最后加一个0:x<<1
  • 在最后加一个1:(x<<1)+1    (x<<1)|1
  • 把最后一位变为1:x|1
  • 把最后一位变为0:(x|1)-1
  • 最后一位取反:x^1
  • 把右数第k位变成1:x|(1<<(k-1))
  • 把右数第k位变成0:x&(~(1<<(k-1)))
  • 右数第k为取反:x^(1<<(k-1))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zaiyang遇见

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值