小结
一、例题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)递推:重点关注 起始点的条件

浙公网安备 33010602011771号