C语言中,关于&,^,!布尔代数,移位操作的一些巧妙算法
来源:互联网 发布:soapclient php 扩展 编辑:程序博客网 时间:2024/04/27 13:44
(1) 例如检查一个数X的第n位是否为1,我们可以通过下面的算法实现:
int nBitCheck=(x&pow(2,n-1))/pow(2,n-1);如果返回的是1,则第n位为1,若果是0,则为0;
我们可以通过>>和<<运算符,可以建立位模式屏蔽掉某些位,检查x的第n位是否为1,
int nBitCheck=(x&(1<<n-1))>>(n-1);
(2)统计一个数X(一个字长16位)中1的个数,int bitCount(unsigned int x)
{
n=0;
for(i=1;i<=16;i++){ n+=(x&(1<<i-1)>>(i-1)); }
return n;
}
还可以用下面的方法:
int bitCount(unsigned int x)
{
unsigned int temp;
temp=x-((x>>1)&033333333333)-((x>>2)&011111111111);
return ((tmp+(tmp>>3))&030707070707)%63;
}
上面的你看懂了么!~是不是觉得很Magical!
(3)可以用^(异或)去实现两个数的交换,并且不需要额外的空间,可以拿来娱乐的小算法:
void swap_fun(int *x,int*y)
{
*x=*x^*y;
*y=*x^*y;
*x=*x^*y;
}
/**
以上算法没经过实际测试,只是自己推导的
*/
- C语言中,关于&,^,!布尔代数,移位操作的一些巧妙算法
- 布尔代数以及C语言上的位运算
- 关于C语言中负数的移位
- 关于C语言的文件型指针和移位操作中的一些有趣问题的探讨
- 关于C语言中的移位操作
- c语言中移位操作符的试验
- C语言中关于字符串左右循环移位的问题
- C语言中关于文件操作的一些用法
- C语言中关于链表的一些操作
- 关于C语言中十六进制移位问题
- 深入理解计算机系统(2.2)---布尔代数以及C语言上的位运算
- C语言移位操作
- C语言的移位操作符
- C语言的移位操作符
- C语言的移位操作符
- C语言的移位操作符
- c/c++中一些巧妙的方法
- 一些巧妙的算法
- openlayers
- 基于粒子滤波的物体跟踪zz
- 感人的校园爱情故事 伤感日志分享
- 计算机视觉领域的一些牛人博客,超有实力的研究机构等的
- PHP初体验
- C语言中,关于&,^,!布尔代数,移位操作的一些巧妙算法
- Handler: 主线程如何通知子线程
- java 反射
- 阿狸的童话,我的梦
- bitmap、drawable与bitmapdrawable之间相互转换
- 一位程序员工作10年总结的13个忠告
- 求1000以内的偶数和!!方法一!
- 内疚
- C++写的一个简单的词法分析器(分析C语言)