XFusion API v1.3.0
载入中...
搜索中...
未找到
xf_bit_defs

位定义以及位操作宏。 更多...

xf_bit_defs 的协作图:

宏定义

#define BIT(nr)   (1UL << (nr))
 获取第 nr 位为 1 的值(通常小于 32 位)。
 
#define BIT64(nr)   (1ULL << (nr))
 获取第 nr 位为 1 的值(通常小于 64 位)。
 
#define BIT_SET0(var, n)   ((var) &= ~BIT(n))
 32 位位操作宏(一个位)。
 
#define BIT_SET1(var, n)   ((var) |= BIT(n))
 设置 32 位变量 var 的 bit_n 为 1。
 
#define BIT_SET(var, n, value)    ((value) ? BIT_SET1((var), (n)) : BIT_SET0((var), (n)))
 设置 32 位变量 var 的 bit_n 为 value。
 
#define BIT_FLIP(var, n)   ((var) ^= BIT(n))
 翻转 32 位变量 var 的 bit_n。
 
#define BIT_GET(src, n)   (((src) & BIT(n)) >> (n))
 获取 32 位源 src 的 bit_n。
 
#define BIT_GET_MODIFY0(src, n)   ((src) & ~BIT(n))
 获取将 32 位源 src 的 bit_n 置 0 后的值。
 
#define BIT_GET_MODIFY1(src, n)   ((src) | BIT(n))
 获取将 32 位源 src 的 bit_n 置 1 后的值。
 
#define BIT_GET_MODIFY(src, n, value)    ((value) ? BIT_GET_MODIFY1((src), (n)) : BIT_GET_MODIFY0((src), (n)))
 获取将 32 位源 src 的 bit_n 置 value 后的值。
 
#define BIT_GET_MODIFY_FLIP(src, n)   ((src) ^ BIT(n))
 获取翻转 32 位源 src 的 bit_n 后的值。
 
#define BITS_MASK(n)   (((n) < 32) ? (BIT(n) - 1) : (~0UL))
 32 位位操作宏(多位)。
 
#define BITS_SET0(var, bits_mask)   ((var) &= ~(bits_mask))
 设置 32 位变量 var 的对应位掩码 bits_mask 为 1 的地方为 0。
 
#define BITS_SET1(var, bits_mask)   ((var) |= (bits_mask))
 设置 32 位变量 var 的对应位掩码 bits_mask 为 1 的地方为 1。
 
#define BITS_FLIP(var, bits_mask)   ((var) ^= (bits_mask))
 翻转 32 位变量 var 的 bits_mask 为 1 的位。
 
#define BITS_GET(src, n, offset)   (((src) & (BITS_MASK(n) << (offset))) >> (offset))
 获取 32 位 src 内,从 offset 位起,共 n 位数据。
 
#define BITS_CHECK(src, bits_mask)   (!!((src) & (bits_mask)))
 检查变量 var 在 bits_mask 的位置上是否存在 1。
 
#define BITS_GET_MODIFY(src, n, offset, value)
 将 32 位 src 的 offset 位起 n 位修改为 value 并返回(不修改 src)。
 
#define BITS_SET(src, n, offset, value)    ((src) = BITS_GET_MODIFY((src), (n), (offset), (value)))
 设置 32 位 src 的 offset 位起 n 位为 value。
 

32 位位宏定义。

#define BIT31   0x80000000
 
#define BIT30   0x40000000
 
#define BIT29   0x20000000
 
#define BIT28   0x10000000
 
#define BIT27   0x08000000
 
#define BIT26   0x04000000
 
#define BIT25   0x02000000
 
#define BIT24   0x01000000
 
#define BIT23   0x00800000
 
#define BIT22   0x00400000
 
#define BIT21   0x00200000
 
#define BIT20   0x00100000
 
#define BIT19   0x00080000
 
#define BIT18   0x00040000
 
#define BIT17   0x00020000
 
#define BIT16   0x00010000
 
#define BIT15   0x00008000
 
#define BIT14   0x00004000
 
#define BIT13   0x00002000
 
#define BIT12   0x00001000
 
#define BIT11   0x00000800
 
#define BIT10   0x00000400
 
#define BIT9   0x00000200
 
#define BIT8   0x00000100
 
#define BIT7   0x00000080
 
#define BIT6   0x00000040
 
#define BIT5   0x00000020
 
#define BIT4   0x00000010
 
#define BIT3   0x00000008
 
#define BIT2   0x00000004
 
#define BIT1   0x00000002
 
#define BIT0   0x00000001
 

64 位位宏定义。

#define BIT63   (0x80000000ULL << 32)
 
#define BIT62   (0x40000000ULL << 32)
 
#define BIT61   (0x20000000ULL << 32)
 
#define BIT60   (0x10000000ULL << 32)
 
#define BIT59   (0x08000000ULL << 32)
 
#define BIT58   (0x04000000ULL << 32)
 
#define BIT57   (0x02000000ULL << 32)
 
#define BIT56   (0x01000000ULL << 32)
 
#define BIT55   (0x00800000ULL << 32)
 
#define BIT54   (0x00400000ULL << 32)
 
#define BIT53   (0x00200000ULL << 32)
 
#define BIT52   (0x00100000ULL << 32)
 
#define BIT51   (0x00080000ULL << 32)
 
#define BIT50   (0x00040000ULL << 32)
 
#define BIT49   (0x00020000ULL << 32)
 
#define BIT48   (0x00010000ULL << 32)
 
#define BIT47   (0x00008000ULL << 32)
 
#define BIT46   (0x00004000ULL << 32)
 
#define BIT45   (0x00002000ULL << 32)
 
#define BIT44   (0x00001000ULL << 32)
 
#define BIT43   (0x00000800ULL << 32)
 
#define BIT42   (0x00000400ULL << 32)
 
#define BIT41   (0x00000200ULL << 32)
 
#define BIT40   (0x00000100ULL << 32)
 
#define BIT39   (0x00000080ULL << 32)
 
#define BIT38   (0x00000040ULL << 32)
 
#define BIT37   (0x00000020ULL << 32)
 
#define BIT36   (0x00000010ULL << 32)
 
#define BIT35   (0x00000008ULL << 32)
 
#define BIT34   (0x00000004ULL << 32)
 
#define BIT33   (0x00000002ULL << 32)
 
#define BIT32   (0x00000001ULL << 32)
 

详细描述

位定义以及位操作宏。

宏定义说明

◆ BIT31

#define BIT31   0x80000000

在文件 xf_bit_defs.h39 行定义.

◆ BIT30

#define BIT30   0x40000000

在文件 xf_bit_defs.h40 行定义.

◆ BIT29

#define BIT29   0x20000000

在文件 xf_bit_defs.h41 行定义.

◆ BIT28

#define BIT28   0x10000000

在文件 xf_bit_defs.h42 行定义.

◆ BIT27

#define BIT27   0x08000000

在文件 xf_bit_defs.h43 行定义.

◆ BIT26

#define BIT26   0x04000000

在文件 xf_bit_defs.h44 行定义.

◆ BIT25

#define BIT25   0x02000000

在文件 xf_bit_defs.h45 行定义.

◆ BIT24

#define BIT24   0x01000000

在文件 xf_bit_defs.h46 行定义.

◆ BIT23

#define BIT23   0x00800000

在文件 xf_bit_defs.h47 行定义.

◆ BIT22

#define BIT22   0x00400000

在文件 xf_bit_defs.h48 行定义.

◆ BIT21

#define BIT21   0x00200000

在文件 xf_bit_defs.h49 行定义.

◆ BIT20

#define BIT20   0x00100000

在文件 xf_bit_defs.h50 行定义.

◆ BIT19

#define BIT19   0x00080000

在文件 xf_bit_defs.h51 行定义.

◆ BIT18

#define BIT18   0x00040000

在文件 xf_bit_defs.h52 行定义.

◆ BIT17

#define BIT17   0x00020000

在文件 xf_bit_defs.h53 行定义.

◆ BIT16

#define BIT16   0x00010000

在文件 xf_bit_defs.h54 行定义.

◆ BIT15

#define BIT15   0x00008000

在文件 xf_bit_defs.h55 行定义.

◆ BIT14

#define BIT14   0x00004000

在文件 xf_bit_defs.h56 行定义.

◆ BIT13

#define BIT13   0x00002000

在文件 xf_bit_defs.h57 行定义.

◆ BIT12

#define BIT12   0x00001000

在文件 xf_bit_defs.h58 行定义.

◆ BIT11

#define BIT11   0x00000800

在文件 xf_bit_defs.h59 行定义.

◆ BIT10

#define BIT10   0x00000400

在文件 xf_bit_defs.h60 行定义.

◆ BIT9

#define BIT9   0x00000200

在文件 xf_bit_defs.h61 行定义.

◆ BIT8

#define BIT8   0x00000100

在文件 xf_bit_defs.h62 行定义.

◆ BIT7

#define BIT7   0x00000080

在文件 xf_bit_defs.h63 行定义.

◆ BIT6

#define BIT6   0x00000040

在文件 xf_bit_defs.h64 行定义.

◆ BIT5

#define BIT5   0x00000020

在文件 xf_bit_defs.h65 行定义.

◆ BIT4

#define BIT4   0x00000010

在文件 xf_bit_defs.h66 行定义.

◆ BIT3

#define BIT3   0x00000008

在文件 xf_bit_defs.h67 行定义.

◆ BIT2

#define BIT2   0x00000004

在文件 xf_bit_defs.h68 行定义.

◆ BIT1

#define BIT1   0x00000002

在文件 xf_bit_defs.h69 行定义.

◆ BIT0

#define BIT0   0x00000001

在文件 xf_bit_defs.h70 行定义.

◆ BIT63

#define BIT63   (0x80000000ULL << 32)

在文件 xf_bit_defs.h82 行定义.

◆ BIT62

#define BIT62   (0x40000000ULL << 32)

在文件 xf_bit_defs.h83 行定义.

◆ BIT61

#define BIT61   (0x20000000ULL << 32)

在文件 xf_bit_defs.h84 行定义.

◆ BIT60

#define BIT60   (0x10000000ULL << 32)

在文件 xf_bit_defs.h85 行定义.

◆ BIT59

#define BIT59   (0x08000000ULL << 32)

在文件 xf_bit_defs.h86 行定义.

◆ BIT58

#define BIT58   (0x04000000ULL << 32)

在文件 xf_bit_defs.h87 行定义.

◆ BIT57

#define BIT57   (0x02000000ULL << 32)

在文件 xf_bit_defs.h88 行定义.

◆ BIT56

#define BIT56   (0x01000000ULL << 32)

在文件 xf_bit_defs.h89 行定义.

◆ BIT55

#define BIT55   (0x00800000ULL << 32)

在文件 xf_bit_defs.h90 行定义.

◆ BIT54

#define BIT54   (0x00400000ULL << 32)

在文件 xf_bit_defs.h91 行定义.

◆ BIT53

#define BIT53   (0x00200000ULL << 32)

在文件 xf_bit_defs.h92 行定义.

◆ BIT52

#define BIT52   (0x00100000ULL << 32)

在文件 xf_bit_defs.h93 行定义.

◆ BIT51

#define BIT51   (0x00080000ULL << 32)

在文件 xf_bit_defs.h94 行定义.

◆ BIT50

#define BIT50   (0x00040000ULL << 32)

在文件 xf_bit_defs.h95 行定义.

◆ BIT49

#define BIT49   (0x00020000ULL << 32)

在文件 xf_bit_defs.h96 行定义.

◆ BIT48

#define BIT48   (0x00010000ULL << 32)

在文件 xf_bit_defs.h97 行定义.

◆ BIT47

#define BIT47   (0x00008000ULL << 32)

在文件 xf_bit_defs.h98 行定义.

◆ BIT46

#define BIT46   (0x00004000ULL << 32)

在文件 xf_bit_defs.h99 行定义.

◆ BIT45

#define BIT45   (0x00002000ULL << 32)

在文件 xf_bit_defs.h100 行定义.

◆ BIT44

#define BIT44   (0x00001000ULL << 32)

在文件 xf_bit_defs.h101 行定义.

◆ BIT43

#define BIT43   (0x00000800ULL << 32)

在文件 xf_bit_defs.h102 行定义.

◆ BIT42

#define BIT42   (0x00000400ULL << 32)

在文件 xf_bit_defs.h103 行定义.

◆ BIT41

#define BIT41   (0x00000200ULL << 32)

在文件 xf_bit_defs.h104 行定义.

◆ BIT40

#define BIT40   (0x00000100ULL << 32)

在文件 xf_bit_defs.h105 行定义.

◆ BIT39

#define BIT39   (0x00000080ULL << 32)

在文件 xf_bit_defs.h106 行定义.

◆ BIT38

#define BIT38   (0x00000040ULL << 32)

在文件 xf_bit_defs.h107 行定义.

◆ BIT37

#define BIT37   (0x00000020ULL << 32)

在文件 xf_bit_defs.h108 行定义.

◆ BIT36

#define BIT36   (0x00000010ULL << 32)

在文件 xf_bit_defs.h109 行定义.

◆ BIT35

#define BIT35   (0x00000008ULL << 32)

在文件 xf_bit_defs.h110 行定义.

◆ BIT34

#define BIT34   (0x00000004ULL << 32)

在文件 xf_bit_defs.h111 行定义.

◆ BIT33

#define BIT33   (0x00000002ULL << 32)

在文件 xf_bit_defs.h112 行定义.

◆ BIT32

#define BIT32   (0x00000001ULL << 32)

在文件 xf_bit_defs.h113 行定义.

◆ BIT

#define BIT (   nr)    (1UL << (nr))

获取第 nr 位为 1 的值(通常小于 32 位)。

参数
nr比特下标,从 0 开始。
注解
生成值的范围不能超过 unsigned long 所能表示的范围。

在文件 xf_bit_defs.h135 行定义.

◆ BIT64

#define BIT64 (   nr)    (1ULL << (nr))

获取第 nr 位为 1 的值(通常小于 64 位)。

参数
nr比特下标,从 0 开始。
注解
生成值的范围不能超过 unsigned long long 所能表示的范围。

在文件 xf_bit_defs.h145 行定义.

◆ BIT_SET0

#define BIT_SET0 (   var,
 
)    ((var) &= ~BIT(n))

32 位位操作宏(一个位)。

设置 32 位变量 var 的 bit_n 为 0。

参数
var被读写的变量。
n比特下标,从 0 开始。

在文件 xf_bit_defs.h168 行定义.

◆ BIT_SET1

#define BIT_SET1 (   var,
 
)    ((var) |= BIT(n))

设置 32 位变量 var 的 bit_n 为 1。

参数
var被读写的变量。
n比特下标,从 0 开始。

在文件 xf_bit_defs.h178 行定义.

◆ BIT_SET

#define BIT_SET (   var,
  n,
  value 
)     ((value) ? BIT_SET1((var), (n)) : BIT_SET0((var), (n)))

设置 32 位变量 var 的 bit_n 为 value。

参数
var被读写的变量。
n比特下标,从 0 开始。
value更新的值。

在文件 xf_bit_defs.h189 行定义.

◆ BIT_FLIP

#define BIT_FLIP (   var,
 
)    ((var) ^= BIT(n))

翻转 32 位变量 var 的 bit_n。

参数
var被翻转的变量。
n比特下标,从 0 开始。

在文件 xf_bit_defs.h200 行定义.

◆ BIT_GET

#define BIT_GET (   src,
 
)    (((src) & BIT(n)) >> (n))

获取 32 位源 src 的 bit_n。

参数
src被读取的变量。
n比特下标,从 0 开始。
返回
src 的 bit_n 上的值。

在文件 xf_bit_defs.h212 行定义.

◆ BIT_GET_MODIFY0

#define BIT_GET_MODIFY0 (   src,
 
)    ((src) & ~BIT(n))

获取将 32 位源 src 的 bit_n 置 0 后的值。

参数
src被读取的变量。
n比特下标,从 0 开始。
返回
32 位 src 的 bit_n 置 0 后的值。

在文件 xf_bit_defs.h224 行定义.

◆ BIT_GET_MODIFY1

#define BIT_GET_MODIFY1 (   src,
 
)    ((src) | BIT(n))

获取将 32 位源 src 的 bit_n 置 1 后的值。

参数
src被读取的变量。
n比特下标,从 0 开始。
返回
32 位 src 的 bit_n 置 1 后的值。

在文件 xf_bit_defs.h236 行定义.

◆ BIT_GET_MODIFY

#define BIT_GET_MODIFY (   src,
  n,
  value 
)     ((value) ? BIT_GET_MODIFY1((src), (n)) : BIT_GET_MODIFY0((src), (n)))

获取将 32 位源 src 的 bit_n 置 value 后的值。

参数
src被读取的变量。
n比特下标,从 0 开始。
value0 或 1。
返回
32 位 src 的 bit_n 置 value 后的值。

在文件 xf_bit_defs.h249 行定义.

◆ BIT_GET_MODIFY_FLIP

#define BIT_GET_MODIFY_FLIP (   src,
 
)    ((src) ^ BIT(n))

获取翻转 32 位源 src 的 bit_n 后的值。

参数
src被读取的变量。
n比特下标,从 0 开始。
返回
翻转 32 位 src 的 bit_n 后的值。

在文件 xf_bit_defs.h262 行定义.

◆ BITS_MASK

#define BITS_MASK (   n)    (((n) < 32) ? (BIT(n) - 1) : (~0UL))

32 位位操作宏(多位)。

获取低 n 位为 1 的位掩码。

参数
n小于等于 32 的数。
返回
低 n 位为 1 的位掩码。

示例如下:

BITS_MASK(6); // == 0x003f == 0b00111111
BITS_MASK(13); // == 0x1fff == 0b00011111 11111111
#define BITS_MASK(n)
32 位位操作宏(多位)。

在文件 xf_bit_defs.h282 行定义.

◆ BITS_SET0

#define BITS_SET0 (   var,
  bits_mask 
)    ((var) &= ~(bits_mask))

设置 32 位变量 var 的对应位掩码 bits_mask 为 1 的地方为 0。

参数
var被设置的变量。
bits_mask位掩码。注意!为 1 的位表示需要被设为 0 的位。
注解
  1. 位掩码为 1 的位表示需要被设为 0 的位。

示例如下:

uint32_t var = 0xffff;
BITS_SET0(var, 0b0011 0110 0101 1010); // == 0b11001001 10100101
var = 0xffff;
BITS_SET0(var, BITS_MASK(4) << 3); // == 0b11111111 10000111
#define BITS_SET0(var, bits_mask)
设置 32 位变量 var 的对应位掩码 bits_mask 为 1 的地方为 0。

在文件 xf_bit_defs.h303 行定义.

◆ BITS_SET1

#define BITS_SET1 (   var,
  bits_mask 
)    ((var) |= (bits_mask))

设置 32 位变量 var 的对应位掩码 bits_mask 为 1 的地方为 1。

参数
var被设置的变量。
bits_mask位掩码。注意!为 1 的位表示需要被设为 1 的位。
注解
  1. 位掩码为 1 的位表示需要被设为 1 的位。

示例如下:

uint32_t var = 0x0000;
BITS_SET1(var, 0b0011 0110 0101 1010); // == 0b00110110 01011010
var = 0x0000;
BITS_SET1(var, BITS_MASK(4) << 3); // == 0b00000000 01111000
#define BITS_SET1(var, bits_mask)
设置 32 位变量 var 的对应位掩码 bits_mask 为 1 的地方为 1。

在文件 xf_bit_defs.h324 行定义.

◆ BITS_FLIP

#define BITS_FLIP (   var,
  bits_mask 
)    ((var) ^= (bits_mask))

翻转 32 位变量 var 的 bits_mask 为 1 的位。

参数
var被设置的变量。
bits_mask位掩码。注意!为 1 的位表示需要被翻转的位。
注解
  1. 位掩码为 1 的位表示需要被翻转的位。

在文件 xf_bit_defs.h337 行定义.

◆ BITS_GET

#define BITS_GET (   src,
  n,
  offset 
)    (((src) & (BITS_MASK(n) << (offset))) >> (offset))

获取 32 位 src 内,从 offset 位起,共 n 位数据。

参数
src被读取的源。
n需要读取 n 位。
offset偏移量。从 bit0 起计算。
返回
32 位源 src 内,从 offset 位起,共 n 位数据。

详细说明如下:

BITS_GET(0b0011 1010 1111 0010, 7, 5) == 0x57 == 0b01010111
bit: 54 3210 : bit == 5
src: 0b0011 1010 1111 0010 : src == 0x3af2
↓ ↓
num: 7654 321 : n == 7
————————————————————————————————————————————
ret: 0b0 1010 111 : ret == 0x57

在文件 xf_bit_defs.h362 行定义.

◆ BITS_CHECK

#define BITS_CHECK (   src,
  bits_mask 
)    (!!((src) & (bits_mask)))

检查变量 var 在 bits_mask 的位置上是否存在 1。

参数
src待检查的变量。
bits_mask位掩码。注意!为 1 的位表示需要检查的位。
注解
  1. 位掩码为 1 的位表示需要检查的位。

在文件 xf_bit_defs.h375 行定义.

◆ BITS_GET_MODIFY

#define BITS_GET_MODIFY (   src,
  n,
  offset,
  value 
)
值:
((((src) ^ ((BITS_MASK(n) & (value)) << (offset))) \
& (BITS_MASK(n) << (offset))) \
^ (src))

将 32 位 src 的 offset 位起 n 位修改为 value 并返回(不修改 src)。

参数
src被读取的源。
n需要修改的位数。
offset偏移量。从 bit0 起计算。
valuesrc 的 offset 位起 n 位源需要修改到的目标值。
返回
32 位 src 的 offset 位起 n 位修改为 value 的值。

示例如下:

// BITS_GET_MODIFY(src , n, offset, value )
BITS_GET_MODIFY(0x4c5ca6d2, 8, 13 , 0b10101111)
// src: 0100 1100 0101 1100 1010 0110 1101 0010 == 0x4c5ca6d2
// 1 0101 111 == (value << 13)
// ↓ ↓↓↓↓ ↓↓↓
// ret: 0100 1100 0101 0101 1110 0110 1101 0010 == 0x4c55e6d2
#define BITS_GET_MODIFY(src, n, offset, value)
将 32 位 src 的 offset 位起 n 位修改为 value 并返回(不修改 src)。

详细说明如下:

0100 1100 0101 1100 1010 0110 1101 0010 <= src
^ 0000 0000 0001 0101 1110 0000 0000 0000 <= ((BITS_MASK(n) & (value)) << (offset))
————————————————————————————————————————————————
0100 1100 0100 1001 0100 0110 1101 0010
0100 1100 0100 1001 0100 0110 1101 0010 ans
& 0000 0000 0001 1111 1110 0000 0000 0000 <= (BITS_MASK(n) << 13)
————————————————————————————————————————————————
0000 0000 0000 1001 0100 0000 0000 0000
0000 0000 0000 1001 0100 0000 0000 0000 ans
^ 0100 1100 0101 1100 1010 0110 1101 0010 <= src
————————————————————————————————————————————————
0100 1100 0101 0101 1110 0110 1101 0010 => ret
注解
  1. n + offset 不要大于 32 位。

在文件 xf_bit_defs.h420 行定义.

◆ BITS_SET

#define BITS_SET (   src,
  n,
  offset,
  value 
)     ((src) = BITS_GET_MODIFY((src), (n), (offset), (value)))

设置 32 位 src 的 offset 位起 n 位为 value。

参见
BITS_GET_MODIFY
注解
  1. n + offset 不要大于 32 位。

在文件 xf_bit_defs.h434 行定义.