mr_lent
mr_lent定义在miracl.h
extern int mr_lent(flash);
函数功能:返回数值的长度。
参数x:浮点数值。
1. 源码分析
mr_lent实现在mrcore.c
#define MR_FLASH 52 // 定义在mirdef.h
#ifdef MR_FLASH
#define MR_EBITS (8*sizeof(double) - MR_FLASH)
/* no of Bits per double exponent */
#define MR_BTS 16
#define MR_MSK 0xFFFF
#endif
typedef unsigned int mr_lentype;
int mr_lent(flash x)
{ /* return length of big or flash in words */
mr_lentype lx;
lx=(x->len&(MR_OBITS));
#ifdef MR_FLASH
return (int)((lx&(MR_MSK))+((lx>>(MR_BTS))&(MR_MSK)));
#else
return (int)lx;
#endif
}
如果定义了MR_FLASH,返回的是低位两字节与高位两字节的和,否则返回的是x的长度。
lx&(MR_MSK)取得lx的低位两个字节,(lx>>(MR_BTS))&(MR_MSK)取得lx的高位两个字节,低位两个字节与高位两个字节相加。