C#代码如下:
public void calc_reg(double f, int R)
{
public const int DEN=2500000;
public const int OSC=10;
public const int R1=2;
public const int R2=4;
double pdf, NUM;
int N;
pdf = (double)OSC / (double)R;
N = (int)(f / pdf);
//printf("N:%d\n", N);
NUM = (f / pdf - N) * DEN;
//printf("NUM:%lf\n", NUM);
r3 = (0x6c000 | ((DEN >> 12) & 0x3ff));
r2 = 0x40000 | ((DEN << 6) & 0x3ffc0) | (R & 0x3f);
r1 = 0x20000 | ((N << 2) & 0x1c00) | (((int)NUM >> 12) & 0x3ff);
r0 = (N << 12 & 0xff000) | ((int)NUM & 0xfff);
r3 = (r3 << 4) | 0x3;
r2 = (r2 << 4) | 0x2;
r1 = (r1 << 4) | 0x1;
r0 = (r0 << 4) | 0x0;
}
其中f为任意输入的值,R=2或R=4
后面这些r3 = (0x6c000 | ((DEN >> 12) & 0x3ff));r3 = (r3 << 4) | 0x3;之类的看不懂啊~
还有像lmxr.r[3] = IPAddress.HostToNetworkOrder((r3 << 4) | 0x2)这种里面的((r3 << 4) | 0x2是个什么意思呢?
5 个解决方案
#1
二进制计算,位移、与或非,这些都是计算机专业的基础知识...去找本计算机原理入门书看吧...
#2
我知道他都是些移位、异或、与等运算,我想知道代码实现的功能是什么
#3
这是个寄存器值计算函数,f为输入的数值(单位MHz),帖子没写清楚,我想请教一下这个代码是想实现什么样的功能,它这么移位、异或、与以后对寄存器有什么影响?为什么要这么做呢?小弟感激涕零
#4
鬼知道功能是什么,从calc_reg这个命名看应该是个简单加密算法用来计算注册码的...
IPAddress.HostToNetworkOrder((r3 << 4) | 0x2)这个是把一个IP地址左移一段再和10或,就是生成一个不相关的新IP地址...
IPAddress.HostToNetworkOrder((r3 << 4) | 0x2)这个是把一个IP地址左移一段再和10或,就是生成一个不相关的新IP地址...
#5
| 二进制按位或运算
(r0 << 4) <<左移运算符,括号的运算结果是将r0左移4位,低位补零
0x打头是十六进制数
从代码反推逻辑
(r0 << 4) <<左移运算符,括号的运算结果是将r0左移4位,低位补零
0x打头是十六进制数
从代码反推逻辑
#1
二进制计算,位移、与或非,这些都是计算机专业的基础知识...去找本计算机原理入门书看吧...
#2
我知道他都是些移位、异或、与等运算,我想知道代码实现的功能是什么
#3
这是个寄存器值计算函数,f为输入的数值(单位MHz),帖子没写清楚,我想请教一下这个代码是想实现什么样的功能,它这么移位、异或、与以后对寄存器有什么影响?为什么要这么做呢?小弟感激涕零
#4
鬼知道功能是什么,从calc_reg这个命名看应该是个简单加密算法用来计算注册码的...
IPAddress.HostToNetworkOrder((r3 << 4) | 0x2)这个是把一个IP地址左移一段再和10或,就是生成一个不相关的新IP地址...
IPAddress.HostToNetworkOrder((r3 << 4) | 0x2)这个是把一个IP地址左移一段再和10或,就是生成一个不相关的新IP地址...
#5
| 二进制按位或运算
(r0 << 4) <<左移运算符,括号的运算结果是将r0左移4位,低位补零
0x打头是十六进制数
从代码反推逻辑
(r0 << 4) <<左移运算符,括号的运算结果是将r0左移4位,低位补零
0x打头是十六进制数
从代码反推逻辑