例如:我用六个字母来代替,两个字母为一个16进制数
kr pq mn(三个数)
另有两个变量x,y
当x+1时,p+4,
当y+1时,m+1,
当m满16时,向q进位,q+1,当q满16时,向p进位,p+1.
当p满16时,向r进位,r+1,当r满16时,向k进位,k+1,
减法亦然。
当x,y变化时,这三个数是这样变的啊~~求算法啊!!!
kr pq mn(三个数)
另有两个变量x,y
当x+1时,p+4,
当y+1时,m+1,
当m满16时,向q进位,q+1,当q满16时,向p进位,p+1.
当p满16时,向r进位,r+1,当r满16时,向k进位,k+1,
减法亦然。
当x,y变化时,这三个数是这样变的啊~~求算法啊!!!
unsigned long temp;
p+4 --> temp+0x400
m+1 --> temp+0x10最后再把temp拆成3个8位。
求出相应p,m;
源数值kr pq mn,则对于该p,m有新数值(用大写表示):
N=n;
M=m%16;
Q=(q+m/16)%16;
P=(p+(q+m/16)/16)%16
...
#include "stdio.h"/*
例如:我用六个字母来代替,两个字母为一个16进制数
kr pq mn(三个数)
另有两个变量x,y
当x+1时,p+4,
当y+1时,m+1,
当m满16时,向q进位,q+1,当q满16时,向p进位,p+1.
当p满16时,向r进位,r+1,当r满16时,向k进位,k+1,
减法亦然。
当x,y变化时,这三个数是这样变的啊~~求算法啊!!!
*/class UDefData
{
private:
//m_szData[0]保存kr
//m_szData[1]保存pq
//m_szData[2]保存mn
unsigned char m_szData[3];
public:
UDefData();
~UDefData(); void GetData (unsigned char* szResult);
void SetData(unsigned short x,unsigned short y);
};UDefData::UDefData()
{
m_szData[0] = 0;
m_szData[1] = 0;
m_szData[2] = 0;
}UDefData::~UDefData()
{
}void UDefData::GetData (unsigned char* szResult)
{
szResult[0] = m_szData[0];
szResult[1] = m_szData[1];
szResult[2] = m_szData[2];
}void UDefData::SetData(unsigned short x,unsigned short y)
{
//当y+1时,m+1,也就是m_szData[2]加16
m_szData[2] = y*16; //当x+1时,p+4,也就是m_szData[1]加4*16,还要加上m_szData[2]可能的进位
m_szData[1] = ((y*16)>>8) + x*4*16; //只用保存m_szData[1]可能产生的进位
m_szData[0] = (((y*16)>>8) + x*4*16)>>8;
}
void main()
{
UDefData data;
unsigned char szResult[3]; data.SetData (1,1);
data.GetData (szResult); printf("%02x %02x %02x\n",szResult[0],szResult[1],szResult[2]);
}/*
程序输出结果:00 40 10
*/
现在
x = nValue/(16*1024);
y = (nValue/16)%1024;看看,对么?