您的位置:首页 > 编程语言

编程中用到的一些算法

2010-09-16 16:30 155 查看
1.取任意位:#define BIT(A,B) ((A>>B)&0x01) // A is the variable while

// B is the bit number 从第0位数起,而不是从第1位数起

2.取十进制i各位上的数给a
,

a[0]=i%10;

a[1]=i%100/10;

a[2]=i%1000%100;

3.取反运算

i^=1;//将i取反.

4.

#define SetBit(Port,N) (Port|=(1<<N)) //设置IO某一位

#define ClrBit(Port,N) (Port&=~(1<<N)) //清空IO某一位

#define ReverBit(Port,N) (Port^=(1<<N)) //取反IO某一位

#define GetBit(Pin,N) ((Pin>>N)&0x01) //读取IO某一位

4.端口操作:

#define led1 ( *((u32*)0x42210180) )

5.

位运算
一、
位运算应用口诀
清零取反要用与,
某位置一可用或;
若要取反和交换,
轻轻松松用异或。
二、
移位运算
1.“<<”左移:左边的位将从字头挤掉,右边的空出位补0。左移几位,相当于乘以二的几次方。
2.“>>”右移:右边的位将从字头挤掉,左边空出的位若是正数补0,若是负数,可能补1或补0相当于除以2的几次方。
3.按位与&:
A、清零特定位
eg:x=101101
将第四位清零

X&~(1<<(4-1))

B、取某数中的指定位 eg:X=101101
取第三

X>>(3-1)&1
4.按位或1:
常数某位置1,其它不变
eg:X=101101 将第二位置1
X |(1<<2-1)
5.按位异或^:
A、使特定位取反
eg: X=101101 末5位置1

X^(1<<(5-1))

B、不引入第三变量,交换两个变量的值

eg: void swap (int x, int y)
三、
应用举例
1.将char型变量循环左移K次
a=a<<k | a>>8-k
循环右移K次
a=a>>k | a<<8-k

2.求平均值(不产生溢出),求X、Y的平均值:
(X&Y)+((X^Y)>>1)

3.取模运算:a%(2的n次方)ó
a&(2的n-1次方)

4.判断奇数
(X&1)==1

判断偶数
(X&1)==0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: