继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【备战春招】第9天-C01左移与右移

taoy
关注TA
已关注
手记 94
粉丝 9
获赞 1
  • 课程名称:Linux C语言结构体
  • 课程链接:https://www.imooc.com/learn/409
  • 章节名称:
    • 第6章:位运算的秘密
      • 6-4 左移与右移
    • 第7章:重识递归函数
      • 7-1 递归调用
      • 7-2 递归原理
  • 讲师姓名:雷过就跑
  • 时间:2023-02-015 12:30

课程内容

  • 左移:将数据对应的二进制值逐位左移若干位

    • 左移时,会把最高位舍弃掉,而在最后补上0

    • 规则为:高位丢弃,低位补0

    • 左移n位相当于,将原来值扩大2n2^n2n

    • int x = 0x80000001;// 这是一个符号位为1的整数
      x << 1;// 结果是2,符号位超出整型范围,被舍弃
      
    • 如果计算与2相乘,左移操作效率要高出很多

  • 右移:将数据对应的二进制值逐位右移若干位

    • 右移相当于整除2的过程
    • 对于符号位为1的右移,右移时要补1
  • 函数的递归调用

    • 在调用函数过程中,被调用函数调用它本身的过程
    • 递归原理
      • 函数在定义中的参数,在没有调用的时候,是不会被分配内存单元的,只有在调用的时候才会被分配
      • 在调用函数时的,参数就叫实参,会为其分配临时存储单元,然后才将其值传递进来
      • 同时传递进来的还有主调函数执行处代码地址,因为调用函数时,会移动到代码其它位置处,函数执行完,再接着调用处继续执行,所以要记录主调函数代码的地址
      • 调用函数结束后,将控制转回主调函数,并释放临时存储空间
      • 所以在函数调用过程中要保存很多值
        • 做保护现场时,传递的返回地址
        • 函数参数
        • 函数调用结束时,其返回值
        • 这些都是数据,都是保存至栈中,通过控制栈指针来容纳这些数据
      • 所以如果早递归调用,就是不断在产生上述数据
        • 因为是递归调用,所以返回地址应该都相同
        • 但参数不同,都在栈中不断被创建,如果没有停止,就出现栈溢出
        • 如果执行到某处,停止分配栈空间,也就是不需要递归调用了,就会产生一个返回值
        • 带着这个返回值,根据返回地址,从上一次被调用处开始执行
      • 递归就是将一个问题规模为n的问题简化为规模为n-1的问题,然后依次降解,直到问题可解,将低规模的解再带入到高规模问题中,最后求出规模为n的问题的解
        • 递推思想,是构造一个低阶的规模方法,然后不断增加规模,直到高规模问题得解

学习心得

可以深入理解递归啦
函数调用
求阶乘
递推

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP