gpt4 book ai didi

C——数字排序说明

转载 作者:行者123 更新时间:2023-11-30 21:27:30 25 4
gpt4 key购买 nike

我编写了一个 C 程序,该程序对 50 个从 0 - 255 的随机数组成的数组进行排序。排序后的最大数字以二进制数字显示在 8 个 LED 上。对于最低排序数也是如此。我完全理解该程序,但是我需要写一个简短的描述,并且正在努力解决这两个功能:

void binaryLowesttNumber()
{
int remainder = lowArray; /* remainder is what I am going to be left with after taking away the value of the pins,
sets remainder as the lowest sorted number */
int j = 128; // value of pins in binary
int i = 7; // index of current pin
while (i >= 0)
{
if (remainder >= j) //if remainder is larger or equal to the value of the current pin
{
digitalWrite(pinArray[i], HIGH);
remainder = remainder - j; // takes value of pin away from remainder
j = j >> 1; // halves the value of j
i--; // moves to next pin
}
else
{
j = j >> 1; // halves the value of j
i--; // moves to next pin
}
}
}

void binaryHighestNumber()
{
int remainder = highArray; // same as binaryLowestNumber function except the remainder will be the highest sorted number
int i = 128;
int thisPin = 7;

while (remainder > 0)
{
while (remainder >= i)
{
double j = i / 2;
digitalWrite(pinArray[thisPin], HIGH);
remainder = remainder - i;
i = i - j;
thisPin--;
}
while (remainder < i)
{
int j = i / 2;
if (j >= 1)
{
i = i - j;
thisPin--;
}
else
{
i = 0;
}
}
}
}

最佳答案

专注于该函数的功能(而不是它如何做到这一点,您的代码对此进行了解释)。函数 binaryHighestNumber() 做什么?正如我对您的理解正确的那样,您的函数对 50 个从 0 - 255 的随机数组成的数组进行排序,并在 8 个 LED 上以二进制数字形式显示最大的数字。因此,一个完美且内容丰富的评论将是:

/**
* Sort an array of 50 random numbers from 0 - 255 and
* display the highest number on 8 LEDs as binary digit using 'digitalWrite()' function.
*/
void binaryHighestNumber()
...

尝试使用doxygen格式来记录你的代码,这样使用过 doxygen 的其他人就很容易理解。并记录该函数的作用,而不是它是如何做到的。请参阅Linux kernel coding commentingGNU coding standard .

编辑:
我没有看到 binaryHighestNumber() 函数中完成任何排序。你确定这个函数对数组进行排序吗?当我检查函数定义时,它所做的只是在 LED 上显示变量 highArray 中存储的值。也许更好的评论是这样的:

/**
* Display the highest number obtained from sorting array of 50 elements
* stored in a global variable 'highArray'
* on 8 LEDs as binary digit using 'digitalWrite()' function.
*/
void binaryHighestNumber()
...

编辑2:
目的是,问题是代码如何工作以及现在如何对其进行注释,所以我们开始吧。让我们专注于 binaryHighestNumber()
基本上,该函数的作用是将 gpios 设置为高电平,该数字对应于 highArray 中的位数。因此,对于 highArray = 0b10101010,我们希望点亮 gpios 编号 7、5、3 和 1(从 0 开始编号)。对于 highArray = 0b10100101,我们要点亮 gpios 编号 7、5、2 和 0。
代码binaryHighestNumber() 跟踪余数 - 从已检查的gpios 数量中减去的数字。另一个是 i - 一个等于 2 的当前检查的 gpio 编号次方的值。 thisPin 用于跟踪我们当前检查的 gpio 编号,它等于 log2(i)

首先,remainder = highArrayi = 128,我们想要检查是否应该将 gpio 编号 7 设置为高。我们需要检查余数中的第 7 位是否已设置。如果余数大于128,则意味着位号7被设置,这意味着gpio号7需要设置为高。如果第 7 位未设置,则意味着余数低于 128,我们不会点亮 GPIO。如果设置了第 7 位,我们从余数中删除第 7 位(即从余数中减去 i,等于 128),然后将 i 除以 2 向右移位。如果未设置第 7 位,我们只将 i 向右移位。现在 remainder = highArray&0b01111111i = 64。我们继续这个过程。如果余数大于 64,则意味着设置了第 6 位,我们需要将 GPIO 编号 6 设置为高,从余数中删除第 6 位(通过从中减去 i)并将 i 向左移位(通过将其除以2)。如果数字低于 64,我们只对 i 进行位移位并继续。
然后 remainder = highArray&0b00111111i = 32 继续,直到余数等于 0。 (即余数 = highArray&0b00000000
您可以将代码简化为更简单的形式,如下所示:

void binaryHighestNumber()
{
int remainder = highArray; // same as binaryLowestNumber function except the remainder will be the highest sorted number
int i = 128;
int thisPin = 7;
while (remainder > 0) {
if (remainder >= i) {
digitalWrite(pinArray[thisPin--], HIGH);
remainder -= i;
i -= i/2;
}
if (remainder < i) {
if (i != 1) {
i -= i/2;
thisPin--;
} else {
i = 0;
}
}
}
}

或者可能像这样:

void binaryHighestNumber()
{
int remainder = highArray; // same as binaryLowestNumber function except the remainder will be the highest sorted number
int i = 128;
int thisPin = 7;
while (remainder > 0) {
if (i != 0 && remainder >= i) {
digitalWrite(pinArray[thisPin--], HIGH);
remainder -= i;
i /= 2;
}
if (remainder < i) {
i /= 2;
thisPin--;
}
}
}

注意当i = 1时,i -= i/2;不等于i/= 2;。我还删除了 while 循环,它们没有改变任何东西。我已经删除了 j 变量,它们不是必需的,也不会改变任何内容。
有一种更简单的方法来检查字节中的每一位并点亮这些 GPIO,但我想我会将其留给您来找出答案。

关于C——数字排序说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50271450/

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