基于数组的位运算1 数组位的基本运算
2011-03-17 12:34
274 查看
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)));
}
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)));
}
相关文章推荐
- 2015年大二上-数据结构-数组与广义表(2)-3.上三角矩阵的压缩存储及基本运算
- 基于递归调用和链式结构的二叉树构建方法及其基本运算
- 数据结构实验——基于数组的栈基本操作
- 实现基于静态数组的顺序表的以下基本操作:
- 数组的基本运算(2)
- 基于数组的位运算2 计算二进制1的个数
- 基于数组的位运算3 按bit位反转数组
- 数组和广义表的基本运算实现
- 2015年大二上-数据结构-数组与广义表(2)-4.下三角矩阵的压缩存储及基本运算
- 实现基于静态数组的顺序表的以下基本操作:
- 【基本数据结构】C语言基于数组的栈操作
- shell 基本计算、逻辑运算、位运算详解
- 第八周(2) 数组和广义表 对称矩阵的压缩存储及基本运算
- NumPy学习笔记(2)--Array数组和矩阵基本运算
- C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,如复数(第10章的例子大多是处理虚数的),再如分数。本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,
- 基于数组的位运算4 位数组按bit位整体移动
- 基于 Android NDK 的学习之旅-----数据传输(基本数据类型和数组传输)
- 基于 Android NDK 的学习之旅-----数据传输(基本数据类型和数组传输)
- 基于 Android NDK 的学习之旅-----数据传输(基本数据类型和数组传输)
- NumPy学习笔记(2)--Array数组和矩阵基本运算