gpt4 book ai didi

c - 我如何阅读这个软件锁相环代码?

转载 作者:太空宇宙 更新时间:2023-11-04 03:46:44 25 4
gpt4 key购买 nike

在寻找软件锁相环示例时,我遇到了以下问题

Software Phase Locked Loop example code needed

Adam Davis 的回答中,给出了一个已损坏的网站,我已经尝试了评论中提供的新链接,但我也无法使其正常工作。

Kragen Javier Sitaker 的回答给出了以下代码作为软件锁相环的简单示例。

main(a,b){for(;;)a+=((b+=16+a/1024)&256?1:-1)*getchar()-a/512,putchar(b);}

他的回答中还包含一个链接,该链接应该是一个更具可读性的示例,但该链接也已损坏。因此,我一直在尝试将上面的代码翻译成更简单、更易读的代码。

我已经走了这么远:

main(a,b){
for(;;){
// here I need to break up the code somehow into a if() statement('s).
if(here I get lost){
a = a+1;
if(here i get lost some more){
b = b+1;
}
}
}

感谢 SO 问题 What does y -= m < 3 mean?

我知道可以将 a+=b+= 分解为 if 语句。但是代码中的 (&256? 1 : -1)*getchar()-a/512,putchar(b); 部分让我很不舒服。我一直在 Google 和 SO 上寻找所用符号和函数的含义。

我知道 & 符号表示内存中的地址。

我知道 : 符号声明一个位域 OR 可以与作为条件运算符的 ? 符号结合使用。我可以使用这两者的组合,如 sirgeorge answer in what does the colon do in c?

Theory Behind getchar() and putchar() Functions

我知道 getchar() 读取一个字符

我知道putchar()显示字符

但是示例代码中所有这些的组合对我和 .即使我知道它们分别做什么,我也无法让它对我自己可读。

所以我的问题是:我如何阅读这个软件锁相环代码?

main(a,b){for(;;)a+=((b+=16+a/1024)&256?1:-1)*getchar()-a/512,putchar(b);}

最佳答案

我得到的是:

main (a, b)
{
char c;
for (;;)
{
c = getchar();
b = (b + 16 + (a / 1024));
if(!(b & 256))
{
c = c * -1;
}
a = a + c - (a/512);
putchar(b);
}
}

我必须添加一个 c 变量以免丢失。

程序的作用:

Take a and b.
Infinite loop:
get a char input in c
calculate b
If (b bitwise AND 256)
c = -c
Calculate a
Print b

它似乎将输入转化为其他东西,我必须亲自查看代码才能更好地理解。

希望对您有所帮助!

提示:

https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B

a+= => a = a +

a?b:c => if(a){return b;} else {return c;}(作为函数本身,它并不真正返回)

添加括号,有帮助。

a & b 是按位与:

a/b |0|1|
0|0|0|
1|0|1|

关于c - 我如何阅读这个软件锁相环代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23803471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com