跳转至

arithmetic

arithmetic 提供64位整数除法运算与随机数生成功能,支持无符号和有符号的64位除以32位或64位除法,以及取余运算和随机无符号整数生成。

头文件清单

#include "include/osal/math/osal_math.h"

接口清单

接口名称 功能简述
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

unsigned long long osal_div_u64(unsigned long long dividend, unsigned int divisor)

头文件清单

#include "include/osal/math/osal_math.h"

功能说明

  • 实现无符号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

long long osal_div_s64(long long dividend, int divisor)

头文件清单

#include "include/osal/math/osal_math.h"

功能说明

  • 实现有符号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

unsigned long long osal_div64_u64(unsigned long long dividend, unsigned long long divisor)

头文件清单

#include "include/osal/math/osal_math.h"

功能说明

  • 实现无符号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

long long osal_div64_s64(long long dividend, long long divisor)

头文件清单

#include "include/osal/math/osal_math.h"

功能说明

  • 实现有符号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

unsigned long long osal_div_u64_rem(unsigned long long dividend, unsigned int divisor)

头文件清单

#include "include/osal/math/osal_math.h"

功能说明

  • 实现无符号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

long long osal_div_s64_rem(long long dividend, int divisor)

头文件清单

#include "include/osal/math/osal_math.h"

功能说明

  • 实现有符号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

unsigned long long osal_div64_u64_rem(unsigned long long dividend, unsigned long long divisor)

头文件清单

#include "include/osal/math/osal_math.h"

功能说明

  • 实现无符号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

unsigned int osal_get_random_int(void)

头文件清单

#include "include/osal/math/osal_math.h"

功能说明

  • 生成随机无符号整数
  • 适用于需要随机数的业务场景,如随机延迟、随机选路等
  • 支持系统: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; \
    })

osal_abs

#define osal_abs(x)                           \
    ({                                        \
        long ret;                             \
        if (sizeof(x) == sizeof(long)) {      \
            long __x = (x);                   \
            ret = (__x < 0) ? (-__x) : (__x); \
        } else {                              \
            int __x = (x);                    \
            ret = (__x < 0) ? (-__x) : (__x); \
        }                                     \
        ret;                                  \
    })