arithmetic
arithmetic 提供64位整数除法运算与随机数生成功能,支持无符号和有符号的64位除以32位或64位除法,以及取余运算和随机无符号整数生成。
头文件清单
接口清单
| 接口名称 | 功能简述 |
|---|---|
| osal_div_u64 | 无符号64位整数除以无符号32位整数,返回商 |
| osal_div_s64 | 有符号64位整数除以有符号32位整数,返回商 |
| osal_div64_u64 | 无符号64位整数除以无符号64位整数,返回商 |
| osal_div64_s64 | 有符号64位整数除以有符号64位整数,返回商 |
| osal_div_u64_rem | 无符号64位整数除以无符号32位整数,返回余数 |
| osal_div_s64_rem | 有符号64位整数除以有符号32位整数,返回余数 |
| osal_div64_u64_rem | 无符号64位整数除以无符号64位整数,返回余数 |
| osal_get_random_int | 生成随机无符号整数 |
Functions
osal_div_u64
头文件清单
功能说明
- 实现无符号64位被除数除以无符号32位除数的除法运算,返回商
- 适用于64位与32位混合的除法运算场景,避免编译器直接使用64位除法指令
- 支持系统:linux、liteos
前置条件
- 调用时序约束:无特殊时序要求,可在任意时刻调用
- 依赖关系:调用者须确保除数不为零,否则将产生未定义行为
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| dividend | unsigned long long | 无符号64位被除数 | 0 ~ 18446744073709551615 |
| divisor | unsigned int | 无符号32位除数 | 1 ~ 4294967295 |
返回值
- 返回类型:unsigned long long
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 非零值 | dividend / divisor 的商 | 除数不为零时正常返回 |
| 0 | 商为零 | dividend < divisor |
osal_div_s64
头文件清单
功能说明
- 实现有符号64位被除数除以有符号32位除数的除法运算,返回商
- 适用于64位与32位混合的有符号除法运算场景
- 支持系统:linux、liteos
前置条件
- 调用时序约束:无特殊时序要求,可在任意时刻调用
- 依赖关系:调用者须确保除数不为零,否则将产生未定义行为
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| dividend | long long | 有符号64位被除数 | -9223372036854775808 ~ 9223372036854775807 |
| divisor | int | 有符号32位除数 | -2147483648 ~ -1 或 1 ~ 2147483647 |
返回值
- 返回类型:long long
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 非零值 | dividend / divisor 的商 | 除数不为零时正常返回 |
| 0 | 商为零 | |dividend| < |divisor| |
osal_div64_u64
头文件清单
功能说明
- 实现无符号64位被除数除以无符号64位除数的除法运算,返回商
- 适用于双64位无符号除法运算场景
- 支持系统:linux、liteos
前置条件
- 调用时序约束:无特殊时序要求,可在任意时刻调用
- 依赖关系:调用者须确保除数不为零,否则将产生未定义行为
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| dividend | unsigned long long | 无符号64位被除数 | 0 ~ 18446744073709551615 |
| divisor | unsigned long long | 无符号64位除数 | 1 ~ 18446744073709551615 |
返回值
- 返回类型:unsigned long long
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 非零值 | dividend / divisor 的商 | 除数不为零时正常返回 |
| 0 | 商为零 | dividend < divisor |
osal_div64_s64
头文件清单
功能说明
- 实现有符号64位被除数除以有符号64位除数的除法运算,返回商
- 适用于双64位有符号除法运算场景
- 支持系统:linux、liteos
前置条件
- 调用时序约束:无特殊时序要求,可在任意时刻调用
- 依赖关系:调用者须确保除数不为零,否则将产生未定义行为
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| dividend | long long | 有符号64位被除数 | -9223372036854775808 ~ 9223372036854775807 |
| divisor | long long | 有符号64位除数 | -9223372036854775808 ~ -1 或 1 ~ 9223372036854775807 |
返回值
- 返回类型:long long
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 非零值 | dividend / divisor 的商 | 除数不为零时正常返回 |
| 0 | 商为零 | |dividend| < |divisor| |
osal_div_u64_rem
头文件清单
功能说明
- 实现无符号64位被除数除以无符号32位除数的除法运算,返回余数
- 适用于需要获取除法余数的64位与32位混合运算场景
- 支持系统:linux、liteos
前置条件
- 调用时序约束:无特殊时序要求,可在任意时刻调用
- 依赖关系:调用者须确保除数不为零,否则将产生未定义行为
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| dividend | unsigned long long | 无符号64位被除数 | 0 ~ 18446744073709551615 |
| divisor | unsigned int | 无符号32位除数 | 1 ~ 4294967295 |
返回值
- 返回类型:unsigned long long
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 整除,余数为零 | dividend 能被 divisor 整除 |
| 非零值 | dividend % divisor 的余数 | dividend 不能被 divisor 整除 |
osal_div_s64_rem
头文件清单
功能说明
- 实现有符号64位被除数除以有符号32位除数的除法运算,返回余数
- 适用于需要获取有符号除法余数的64位与32位混合运算场景
- 支持系统:linux、liteos
前置条件
- 调用时序约束:无特殊时序要求,可在任意时刻调用
- 依赖关系:调用者须确保除数不为零,否则将产生未定义行为
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| dividend | long long | 有符号64位被除数 | -9223372036854775808 ~ 9223372036854775807 |
| divisor | int | 有符号32位除数 | -2147483648 ~ -1 或 1 ~ 2147483647 |
返回值
- 返回类型:long long
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 整除,余数为零 | dividend 能被 divisor 整除 |
| 非零值 | dividend % divisor 的余数 | dividend 不能被 divisor 整除 |
osal_div64_u64_rem
头文件清单
功能说明
- 实现无符号64位被除数除以无符号64位除数的除法运算,返回余数
- 适用于需要获取双64位无符号除法余数的运算场景
- 支持系统:linux、liteos
前置条件
- 调用时序约束:无特殊时序要求,可在任意时刻调用
- 依赖关系:调用者须确保除数不为零,否则将产生未定义行为
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| dividend | unsigned long long | 无符号64位被除数 | 0 ~ 18446744073709551615 |
| divisor | unsigned long long | 无符号64位除数 | 1 ~ 18446744073709551615 |
返回值
- 返回类型:unsigned long long
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 整除,余数为零 | dividend 能被 divisor 整除 |
| 非零值 | dividend % divisor 的余数 | dividend 不能被 divisor 整除 |
osal_get_random_int
头文件清单
功能说明
- 生成随机无符号整数
- 适用于需要随机数的业务场景,如随机延迟、随机选路等
- 支持系统:linux、liteos
前置条件
- 依赖关系:随机数生成器已初始化(由操作系统启动时自动完成)
- 上下文限制:无特殊上下文限制,可在任意上下文调用
返回值
- 返回类型:unsigned int
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 ~ 4294967295 | 随机无符号整数 | 正常调用 |
Macros
osal_max
#define osal_max(x, y) \
({ \
__typeof__(x)_max1 = (x); \
__typeof__(y)_max2 = (y); \
(void)(&_max1 == &_max2); \
_max1 > _max2 ? _max1 : _max2; \
})
osal_min
#define osal_min(x, y) \
({ \
__typeof__(x)_min1 = (x); \
__typeof__(y)_min2 = (y); \
(void)(&_min1 == &_min2); \
_min1 < _min2 ? _min1 : _min2; \
})