常用位操作的c++实现
来源:互联网 发布:淘宝网衣服女装 编辑:程序博客网 时间:2024/06/15 11:48
看到这个标题,可能大家会误解,其实就是贡献几个比较实用的运用位运算实现的操作,这对于加快程序的运行速度很有帮助。具体的实现是参考
http://graphics.stanford.edu/~seander/bithacks.html实现的。
下面给出其函数声明及其实现。
//判断该整数是否是2的整数次方bool IsPowerOfTwo (unsigned int value);bool IsPowerOfTwo (int value);//求以2为底的结果unsigned int Log2OfPowerOfTwo (unsigned int powerOfTwo);int Log2OfPowerOfTwo (int powerOfTwo);//判断两个数是否异号bool IsOppositeSigns(int value1,int value2);//不使用分支计算绝对值unsigned int GetAbs(int value);//大于等于value的最近的二的次方的数unsigned int NextPowerOfTwo(unsigned int value);//实现bool IsPowerOfTwo (unsigned int value){ return (value > 0) && ((value & (value - 1)) == 0);}bool IsPowerOfTwo (int value){ return (value > 0) && ((value & (value - 1)) == 0);}unsigned int Log2OfPowerOfTwo (unsigned int powerOfTwo){ unsigned int log2 = (powerOfTwo & 0xAAAAAAAA) != 0; log2 |= ((powerOfTwo & 0xFFFF0000) != 0) << 4; log2 |= ((powerOfTwo & 0xFF00FF00) != 0) << 3; log2 |= ((powerOfTwo & 0xF0F0F0F0) != 0) << 2; log2 |= ((powerOfTwo & 0xCCCCCCCC) != 0) << 1; return log2;}int Log2OfPowerOfTwo (int powerOfTwo){ unsigned int log2 = (powerOfTwo & 0xAAAAAAAA) != 0; log2 |= ((powerOfTwo & 0xFFFF0000) != 0) << 4; log2 |= ((powerOfTwo & 0xFF00FF00) != 0) << 3; log2 |= ((powerOfTwo & 0xF0F0F0F0) != 0) << 2; log2 |= ((powerOfTwo & 0xCCCCCCCC) != 0) << 1; return (int)log2;}bool IsOppositeSigns(int value1,int value2){ return (value1 ^ value2) < 0;}unsigned int GetAbs(int value){ unsigned int r; // the result goes here int const mask = value >> (sizeof(int) * CHAR_BIT - 1); //r = (value + mask) ^ mask; //Patented variation: r = (value ^ mask) - mask; return r;}unsigned int NextPowerOfTwo(unsigned int value){ value--; value |= value >> 1; value |= value >> 2; value |= value >> 4; value |= value >> 8; value |= value >> 16; value++; return value;}
希望对大家有用
0 0
- 常用位操作的c++实现
- 常用的位操作
- C语言一些常用的“位”操作函数
- C语言一些常用的“位”操作函数
- C语言一些常用的“位”操作函数
- C的位操作
- c的位操作
- C的位操作
- C常用位操作相关宏定义
- 嵌入式系统C语言常用位操作
- C语言常用位操作符
- C语言常用基础位操作
- C语言常用基础位操作
- C语言通过位实现对数字的操作
- c/c++的位操作
- C/C++ 的位操作
- C语言的位操作
- c语言的位操作
- 登录按钮点击之后本页出现一个小的页面,类似于弹窗
- iOS视频播放之AVPlayer
- JFinal Web开发学习(五)注册界面和后端验证
- 二分图匹配——定义,经典模型以及简单的匈牙利算法
- C++解析json文件-VS2010中配置Jsoncpp
- 常用位操作的c++实现
- poj 2187
- uva 336
- angularjs 坑 小结
- CVPR 2016-10-10
- Linux 常用的命令
- 第64篇Chrome扩展蓝牙及USB开发(四)
- AVL树
- 国产经典神动画《哈哈镜花缘》每集解读剧评