基于数组的位运算1 数组位的基本运算
来源:互联网 发布:图片分类展示网站源码 编辑:程序博客网 时间:2024/05/15 23:49
typedef unsigned char uchar;
typedef unsigned short ushort;
typedef unsigned int uint;
//vc ++ 6.0 不支持long long
//linux gcc 不支持__int64
#ifdef _MSC_VER
typedef __int64 int64;
typedef unsigned __int64 uint64;
typedef int64 ltype;
#else
typedef long long int64;
typedef unsigned long long uint64;
typedef uint64 ltype;
#endif
//数组类型
# define MOVE 3
# if MOVE == 3
typedef uchar utype;
# elif MOVE == 4
typedef ushort utype;
# elif MOVE == 5
typedef uint utype;
# elif MOVE == 6
typedef uint64 utype;
# endif
//设置宏, 确保数组a与BITARRAY_TYPE 设置一致
# define MASK_N(n) (1 << ((n) & MASK))
# define SET_BIT(a, n) a[(n) >> MOVE] |= MASK_N(n) //设数组a的第n个bit位1
# define CLR_BIT(a, n) a[(n) >> MOVE] &= ~MASK_N(n) //设置n为0
# define FLP_BIT(a, n) a[(n) >> MOVE] ^= MASK_N(n) //测试bit是否为1
# define TST_BIT(a, n) (a[(n) >> MOVE] & MASK_N(n)) //位反转
//宏可以改成函数形式, 不受数组类型影响
void set_bit(uchar* bitarray, uint pos)
{
bitarray[pos >> 3] |= (1 << (pos & 7))
}
//或者c++模版形式
template<typename T>
void set_bit(T* bitarray, uint pos)
{
const int bitmove = sizeof(T) + 2;
bitarray[pos >> bitmove] |= (1 << ((pos & (1 << bitmove) - 1)));
}
- 基于数组的位运算1 数组位的基本运算
- 基于数组的位运算4 位数组按bit位整体移动
- 基于数组的位运算3 按bit位反转数组
- 基于数组的位运算2 计算二进制1的个数
- 数组的基本运算(1)
- 位运算的基本技巧
- 找数组中只出现一次的元素--位运算
- 位运算求数组中只出现一次的数
- 位运算【基本运算】
- 位运算数的运算
- 基于位运算的排序算法
- 基于位运算的权限细粒度控制
- 基于位运算的权限控制
- C#的基本位运算符理解
- 基本操作的位运算实现
- C#位运算符的基本用法
- 位运算的一些基本操作
- 位运算符的基本用法
- 在android 2.2 上开发GC双模手机的考虑---RIL电话管理的设计
- IE8+上传文件时javascript取文件的本地路径的问题C:/fakepath/
- CEditView 中如何像记事本一样自动换行
- android 系统上做GC双模的--modem 的被动消息处理
- 使用grub4dos引导和安装linux系统
- 基于数组的位运算1 数组位的基本运算
- 1.1 问题
- C++各大有名库的介绍
- android 系统上做GC双模的---数据业务的处理分析
- 虚拟机上网的方法
- android 系统上做GC双模的--音频通路等相关设计分析
- 对AU3实现Realtek HD声卡前置音频调节代码的修正
- c#.net常用的小函数和方法集
- [新闻] 有"安心", 不"操心" —— 微软安心服务