小结

 一、例题1:

  L1-3 位运算
  给定一个数,将该数的某二进制位上置0、置1或取反。 
  输入格式:

  第1行:输入一个十进制整数。(32位int取值范围,其二进制数补码表示)

  第2行后:每行输入一个位操作运算要求。

  格式:输入位操作运算类型(1表示置0, 2表示置13表示按位取反) 位数(从最低位向高位,范围从0~31

  最终以键盘输入^Z 或 文件结束(EOF标志)。

  输出格式:

  输出位运算后的整数值。

代码:

复制代码
#include<stdio.h>
int main()
{
    int x,type,count;
    scanf("%d",&x);
    while(scanf("%d %d",&type,&count)!=EOF) {
        if(type==1){
            x=x&(~(1<<count));//置0 :1的二进制位00000001,要使某位置0;则要该位&上0,因为0或1&上0都为0,所以需要将第count位的数置0,就让该位&上0,其他位&上1.
        }else if(type==2){
            x=x|(1<<count); //置1:要使某位置1,则需要该位| 1;其他位不变则让其他位|0,因为0|0=0,1|0=1。
        }else if(type==3){
            x=x^(1<<count);//按位取反:异或使00为0,11为0,01为1,即异或1会变为相反的数;异或上0会变为相同的数;要使某一位取反,则让这位与^1。
        }     
    } 
    printf("%d",x); 
    return 0;
}
复制代码

位运算

——自行先将数字转化为二进制计算,免去自己转换的麻烦

  1 .& 与:1 1为1,其余都为0

  2. | 或:0 0为0,有1即1

  3. ^ 异或:同为1,异为0(00为0,11为0,01为1)

    作用:

    (1)交换数字例如:a^=b;b^=a;a^=b;实现两个数的交换;

    (2)a^a=0

    (3)异或1会变为相反的数;异或上0会变为相同的数;

  4.~ 取反:0变1,1变0

  5.移位运算符

    (1<<左移:将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)

    (2>>右移:无符号数,高位补0;有符号数,正数左补0,负数左补1,右边丢弃;

    注意:操作数的移位运算不改变原有的值,除非通过赋值。

 

二、

 例题2:

 

 代码:

复制代码
#include<stdio.h>
int reverse(int n);
int main ()
{
int n,result;
    scanf("%d",&n);
    reverse(n); 
    return 0;
 } 
 int reverse(int n)
 {
     int result;
     result=n%10;
     printf("%d",result);
    if(n>10) 
     reverse(n/10);
     return result;
}
复制代码

递归函数——函数的嵌套调用

1.函数不能嵌套定义(函数一律平等),但可以嵌套调用

2.递归:与普通调用没有区别(普通调用函数时开辟新的内存空间)——使用递归占据内存较大

3.递归与递推:

(1)递归:重点关注求解目标,从求解目标入手分析与前面的关系;

(2)递推:重点关注 起始点的条件

 

 

 

posted @   吧拉吧拉吧  阅读(130)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示