偶初学编程,对下段代码不太理解,有谁帮我逐行解释一下?
static int GbkHz2244ToYj(int nHzcode)
{
int hi = nHzcode >> 8 & 0xff;
int low = nHzcode & 0xff;
int t2;
int t3;
int t4;
int t1 = t2 = t3 = t4 = 0;
int res = 65535;
if(hi >= 129 && hi <= 160 && low >= 64 && low <= 254)
{
t1 = (hi - 129) * 191 + (low - 64) + 1;
t2 = (t1 * 9 - 1) / 32;
t3 = ((t1 - 1) * 9 - 1) / 32;
t4 = (t1 * 9) % 32;
if(t2 > t3)
res = (ShengMuYinJie.GBKHZCODETOYJ[t2] >>> 32 - t4 & 0x1ff) + (ShengMuYinJie.GBKHZCODETOYJ[t3] << t4 & 0x1ff);
else
if(t2 == t3)
res = ShengMuYinJie.GBKHZCODETOYJ[t2] >>> 32 - t4 & 0x1ff;
} else
if(hi >= 170 && hi <= 254 && low >= 64 && low <= 254)
{
t1 = (hi - 170) * 191 + (low - 64) + 1;
t2 = (t1 * 9 - 1) / 32;
t3 = ((t1 - 1) * 9 - 1) / 32;
t4 = (t1 * 9) % 32;
if(t2 > t3)
res = (ShengMuYinJie.GBKHZCODETOYJ[t2 + 1719] >>> 32 - t4 & 0x1ff) + (ShengMuYinJie.GBKHZCODETOYJ[t3 + 1719] << t4 & 0x1ff);
else
if(t2 == t3)
res = ShengMuYinJie.GBKHZCODETOYJ[t2 + 1719] >>> 32 - t4 & 0x1ff;
} else
if(nHzcode >= 8193 && nHzcode <= 8772)
{
t1 = nHzcode - 8192;
t2 = (t1 * 9 - 1) / 32;
t3 = ((t1 - 1) * 9 - 1) / 32;
t4 = (t1 * 9) % 32;
if(t2 > t3)
res = (ShengMuYinJie.DYZCODETOYJ[t2] >>> 32 - t4 & 0x1ff) + (ShengMuYinJie.DYZCODETOYJ[t3] << t4 & 0x1ff);
else
if(t2 == t3)
res = ShengMuYinJie.DYZCODETOYJ[t2] >>> 32 - t4 & 0x1ff;
} else
{
res = 65535;
}
if(res == 511)
res = 65535;
return res;
}
尤其是位运算,我一点也看不明白.
static int GbkHz2244ToYj(int nHzcode)
{
int hi = nHzcode >> 8 & 0xff;
int low = nHzcode & 0xff;
int t2;
int t3;
int t4;
int t1 = t2 = t3 = t4 = 0;
int res = 65535;
if(hi >= 129 && hi <= 160 && low >= 64 && low <= 254)
{
t1 = (hi - 129) * 191 + (low - 64) + 1;
t2 = (t1 * 9 - 1) / 32;
t3 = ((t1 - 1) * 9 - 1) / 32;
t4 = (t1 * 9) % 32;
if(t2 > t3)
res = (ShengMuYinJie.GBKHZCODETOYJ[t2] >>> 32 - t4 & 0x1ff) + (ShengMuYinJie.GBKHZCODETOYJ[t3] << t4 & 0x1ff);
else
if(t2 == t3)
res = ShengMuYinJie.GBKHZCODETOYJ[t2] >>> 32 - t4 & 0x1ff;
} else
if(hi >= 170 && hi <= 254 && low >= 64 && low <= 254)
{
t1 = (hi - 170) * 191 + (low - 64) + 1;
t2 = (t1 * 9 - 1) / 32;
t3 = ((t1 - 1) * 9 - 1) / 32;
t4 = (t1 * 9) % 32;
if(t2 > t3)
res = (ShengMuYinJie.GBKHZCODETOYJ[t2 + 1719] >>> 32 - t4 & 0x1ff) + (ShengMuYinJie.GBKHZCODETOYJ[t3 + 1719] << t4 & 0x1ff);
else
if(t2 == t3)
res = ShengMuYinJie.GBKHZCODETOYJ[t2 + 1719] >>> 32 - t4 & 0x1ff;
} else
if(nHzcode >= 8193 && nHzcode <= 8772)
{
t1 = nHzcode - 8192;
t2 = (t1 * 9 - 1) / 32;
t3 = ((t1 - 1) * 9 - 1) / 32;
t4 = (t1 * 9) % 32;
if(t2 > t3)
res = (ShengMuYinJie.DYZCODETOYJ[t2] >>> 32 - t4 & 0x1ff) + (ShengMuYinJie.DYZCODETOYJ[t3] << t4 & 0x1ff);
else
if(t2 == t3)
res = ShengMuYinJie.DYZCODETOYJ[t2] >>> 32 - t4 & 0x1ff;
} else
{
res = 65535;
}
if(res == 511)
res = 65535;
return res;
}
尤其是位运算,我一点也看不明白.
这里的大侠是很多的,帮我注一下吧.
int low = nHzcode & 0xff; // 取nHzcode最低字节 ...