• 第五章 函数与位运算


    1、函数

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

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

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

    return 返回值;
    
    • 1

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

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

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

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

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

    void PrintArray(int a[][5]){
    	
    }
    
    • 1
    • 2
    • 3

    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); 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    3、位运算

    3.1、常见的位运算

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

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

    ●&:对应的两个二进制位均为1时,才为1,否则为0。通常用来将某变量中的某些位清0且同时保留其他位不变。也可以用来获取某变量中的某一位。
    ● |:两个二进制位有一个为1时,就为1。通常用来将某变量中的某些位置置位1且其他位不变。
    ● ^:两个二进制位不相同时,才为1,否则为0。通常将某变量中的某些位取反,且保留其他位不变。
    ● :按位非“,将操作数中的二进制位0变为1,1变为0
    ● a< 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))
  • 相关阅读:
    C++多线程编程:其六、unique_lock的使用
    ArcGIS_将多个点数据整合成一个点数据
    计算机毕业设计ssm软件项目Bug管理系统612ed系统+程序+源码+lw+远程部署
    ES5和SE6来实现一个Promise效果
    Redis Set和Sorted Set
    【安卓开发】安卓按键响应
    食品级接触材料的检测标准有哪些?
    《代码大全2》第3章 三思而后行,前期准备
    Java概述
    腾讯云服务器“可用区”相关问题解答(新手选择指导)
  • 原文地址:https://blog.csdn.net/lylzsx20172018/article/details/128041934