为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
C
  • 课程名称: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的问题的解
        • 递推思想,是构造一个低阶的规模方法,然后不断增加规模,直到高规模问题得解

学习心得

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

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
9
获赞与收藏
1

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消