小结
一、例题1:
L1-3 位运算
给定一个数,将该数的某二进制位上置0、置1或取反。
输入格式:
第1行:输入一个十进制整数。(32位int取值范围,其二进制数补码表示)
第2行后:每行输入一个位操作运算要求。
格式:输入位操作运算类型(1表示置0,
2表示置1
,3表示按位取反
) 位数(从最低位向高位,范围从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)递推:重点关注 起始点的条件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了