位操作库

XWOS的位操作库

位操作

XWOS提供了位操作模板库, 基本类型 中定义的 各种 非函数指针类型 都可使用位操作。位操作函数模板包括:

  • xwbop_s1m() :将数据掩码部分的位全部置1
  • xwbop_c0m() :将数据掩码部分的位全部清0
  • xwbop_x1m() :将数据掩码部分的位全部翻转
  • xwbop_rbit() :将数据的位镜面翻转
  • xwbop_re() :将数据的大小端翻转
  • xwbop_ffs() :在数据中从最低位起查找第一个被置1的位
  • xwbop_fls() :在数据中从最高位起查找第一个被置1的位1的位
  • xwbop_ffz() :在数据中从最低位起查找第一个被清0的位
  • xwbop_flz() :在数据中从最高位起查找第一个被清0的位
  • xwbop_weight() :统计数据中1的个数

所有位操作函数的第一个参数均为 基本类型 , 第二个参数是数据或数据的指针,例如:

xwssq_t idx;
/* 从最低位开始查找"xwu32_t"类型的数据"0"中第一个被置1的位,结果为-1 */
idx = xwbop_ffs(xwu32_t, 0);

/* 从最低位开始查找"xwu32_t"类型的数据"0xF0"中第一个被置1的位,结果为4 */
idx = xwbop_ffs(xwu32_t, 0xF0);

 /* 将"xwu32_t"类型的数据"0xAA"进行镜像翻转,结果为0x55 */
xwu32_t rdata = xwbop_rbit(xwu32_t, 0xAA);

位图操作

XWOS提供了基本类型 xwbmp_t ,用于定义位图,位图是 xwbmp_t 的数组。 用户可以声明任意位数的位图,XWOS提供了函数集方便用户操作位图:

  • xwbmpop_declare() :声明位图
  • xwbmpop_assign() :赋值
  • xwbmpop_cmp() :比较两个位图
  • xwbmpop_s1all() :所有位置 1
  • xwbmpop_c0all() :所有位清 0
  • xwbmpop_s1i() :将位图中某位置 1
  • xwbmpop_s1m() :将位图中掩码部分置 1
  • xwbmpop_c0i() :将位图中某位清 0
  • xwbmpop_c0m() :将位图中掩码部分清 0
  • xwbmpop_x1i() :将位图中某位翻转
  • xwbmpop_x1m() :将位图中掩码部分翻转
  • xwbmpop_t1i() :测试位图中的某位是否为 1
  • xwbmpop_t1ma() :测试位图中掩码部分是否全部为 1
  • xwbmpop_t1ma_then_c0m() :测试位图中掩码部分是否全部为1,如果是,就将掩码部分全部清 0
  • xwbmpop_t1mo() :测试位图中掩码部分是否至少有一位为 1
  • xwbmpop_t1mo_then_c0m() :测试位图中掩码部分是否至少有一位为1,如果是,就将掩码部分全部清 0
  • xwbmpop_t0ma() :测试位图中掩码部分是否全部为 0
  • xwbmpop_t0ma_then_s1m() :测试位图中掩码部分是否全部为 0 ,如果是,就将掩码部分全部置 1
  • xwbmpop_t0mo() :测试位图中掩码部分是否至少有一位为 0
  • xwbmpop_t0mo_then_s1m() :测试位图中掩码部分是否至少有一位为 0 ,如果是,就将掩码部分全部置 1
  • xwbmpop_not() :非运算
  • xwbmpop_and() :与运算
  • xwbmpop_or() :或运算
  • xwbmpop_xor() :异或运算
  • xwbmpop_ffs() :从最低位起查找第一个被置1的位
  • xwbmpop_fls() :从最高位起查找第一个被置1的位
  • xwbmpop_ffz() :从最低位起查找第一个被清0的位
  • xwbmpop_flz() :从最高位起查找第一个被清0的位
  • xwbmpop_weight() :统计 1 的个数

API参考