位操作库
XWOS的位操作库
Categories:
少于1分钟
位操作
XWOS提供了位操作模板库, 基本类型 中定义的 各种 非函数指针类型 都可使用位操作。位操作函数模板包括:
xwbop_s1m():将数据掩码部分的位全部置1xwbop_c0m():将数据掩码部分的位全部清0xwbop_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():所有位置 1xwbmpop_c0all():所有位清 0xwbmpop_s1i():将位图中某位置 1xwbmpop_s1m():将位图中掩码部分置 1xwbmpop_c0i():将位图中某位清 0xwbmpop_c0m():将位图中掩码部分清 0xwbmpop_x1i():将位图中某位翻转xwbmpop_x1m():将位图中掩码部分翻转xwbmpop_t1i():测试位图中的某位是否为 1xwbmpop_t1ma():测试位图中掩码部分是否全部为 1xwbmpop_t1ma_then_c0m():测试位图中掩码部分是否全部为1,如果是,就将掩码部分全部清 0xwbmpop_t1mo():测试位图中掩码部分是否至少有一位为 1xwbmpop_t1mo_then_c0m():测试位图中掩码部分是否至少有一位为1,如果是,就将掩码部分全部清 0xwbmpop_t0ma():测试位图中掩码部分是否全部为 0xwbmpop_t0ma_then_s1m():测试位图中掩码部分是否全部为 0 ,如果是,就将掩码部分全部置 1xwbmpop_t0mo():测试位图中掩码部分是否至少有一位为 0xwbmpop_t0mo_then_s1m():测试位图中掩码部分是否至少有一位为 0 ,如果是,就将掩码部分全部置 1xwbmpop_not():非运算xwbmpop_and():与运算xwbmpop_or():或运算xwbmpop_xor():异或运算xwbmpop_ffs():从最低位起查找第一个被置1的位xwbmpop_fls():从最高位起查找第一个被置1的位xwbmpop_ffz():从最低位起查找第一个被清0的位xwbmpop_flz():从最高位起查找第一个被清0的位xwbmpop_weight():统计 1 的个数