int GetIs(ushort val,int n)
{
if (((val >> n) & 1) == 0) return 0;
else return 1;
}
//最大支持 16bit 转 浮点数
float GetQMN(int m, int n,ushort val1)
{
ushort val;
if ((val1 & (1<<(m+n-1))) == 0)//如果最高位是0表示正数
{
val =val1;
}
else//负数
{
val = (ushort)( (~val1) + 1);
}
//负数 才用补码计算
float tmp = 0;
for (int i = 0; i < n; i++)//n=8
{
tmp += (float)(GetIs(val, i) * Math.Pow(2, i-n));
}
for (int i = 0; i < m; i++)//n=8
{
tmp += (float)(GetIs(val, n+i) * Math.Pow(2, i));
}
if ((val1 & (1 << (m + n - 1))) == 0)//如果最高位是0表示正数
{
}
else//负数
{
tmp = tmp * -1;
}
return tmp;
}
//最大支持 16bit 转 16进制数据
ushort GetQMN(int m, int n, float tmp)
{
ushort num = 0;
ushort num2 = 0;
ushort bitx = 0;
int i;
for (i = 0; i < n; i++)
{
bitx = (ushort)((Math.Abs(tmp) / Math.Pow(2, i - n))); num |= (ushort)(bitx << i);
}
for (i = 0; i < (m - 1); i++)
{
bitx = (ushort)((Math.Abs(tmp) / Math.Pow(2, n + i - n))); num |= (ushort)(bitx << i + n);
}
if (tmp < 0) num = (ushort)(((~num)));
num2 = 0;
for (i = 0; i < (m + n - 1); i++)
{
num2 |= (ushort)(num & (1 << i));
}
num2 += 1;
if (tmp < 0) num2 |= (ushort)(1 << (m + n - 1));
return num2;
}