- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一个 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 commenting或GNU 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 = highArray
和 i = 128
,我们想要检查是否应该将 gpio 编号 7 设置为高。我们需要检查余数中的第 7 位是否已设置。如果余数大于128,则意味着位号7被设置,这意味着gpio号7需要设置为高。如果第 7 位未设置,则意味着余数低于 128,我们不会点亮 GPIO。如果设置了第 7 位,我们从余数中删除第 7 位(即从余数中减去 i,等于 128),然后将 i 除以 2 向右移位。如果未设置第 7 位,我们只将 i 向右移位。现在 remainder = highArray&0b01111111
和 i = 64
。我们继续这个过程。如果余数大于 64,则意味着设置了第 6 位,我们需要将 GPIO 编号 6 设置为高,从余数中删除第 6 位(通过从中减去 i)并将 i 向左移位(通过将其除以2)。如果数字低于 64,我们只对 i 进行位移位并继续。
然后 remainder = highArray&0b00111111
和 i = 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/
我正在查看预先重写的 jQuery 代码。我无法理解以下代码。 $('body > *:not(#print-modal):not(script)').clone(); 最佳答案 此选择器匹配以下任何
所以我开始学习MySQL,我对表有点困惑,所以我想澄清一下。数据库中可以有多个表吗?例如: Database1 -Table1 -Username -Password -Table2 -Name
我在 PostgreSQL 中编写了一个函数,其代码如下: for (i = 0; i str[0][i]); values[i] = datumCopy(dat_value,
oid: 行的对象标识符(对象 ID)。这个字段只有在创建表的时候使用了 WITH OIDS ,或者是设置了default_with_oids 配置参数时出现。 这个字段的类型是 oid (和字段同
我在搜索最大连接设备数时发现了 a post大致说: 当使用 P2P_STAR 时,最大设备数量为 10,因为此 topoly 使用 Wi-Fi 热点。也就是说,如果您没有路由器。 这让我问了两个问题
我不明白为什么会这样: Printf.sprintf "%08s" "s" = Printf.sprintf "%8s" "s" - : bool = true 换句话说,我希望: Printf.sp
我正在遵循 Grails in Action 中的示例。我有一个问题,如何理解 addTo*()功能有效。 我有一个简单的域:具有以下关系的用户、帖子、标签: 用户1对M发帖 用户一对一标签 发布 M
请问为什么行 "b[0]= new Child2();"在运行时而不是在编译时失败。请不要检查语法,我只是在这里做了 class Base {} class Child1 : Base {} clas
所以我想进一步加深我对套接字的理解,但是我想首先从最低级别开始(在C语言中,而不是在汇编中大声笑) 但是,我处理的大多数站点都使用SOCK_STREAM或SOCK_DGRAM。但是我已经阅读了Beej
好吧,我对 javascript 语法了解甚少,而且我对 null 的行为感到非常困惑。关于空值有很多讨论,但我似乎无法找出问题所在!请帮我。这是脚本。 var jsonData = '';
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭5 年前。 Improve thi
问题: SeriesSum 类旨在计算以下系列的总和: 类名:SeriesSum 数据成员/实例变量: x:存储整数 n:存储术语数量 sum:用于存储系列总和的双变量 成员函数: SeriesSum
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
今天我在 logcat 中注意到以下内容: D/OpenGLRenderer:0xa2c70600 (CardView) 上的 endAllStagingAnimators,句柄为 0xa2c9d35
如何创建值有序对的列表,例如list1 [(x, y), (x1, y1) ...].?? 学习如何创建此列表后,我需要知道如何将 x 值提供给列表中的用户输入并搜索 x 的下一个值并显示有序对 (x
我在存储过程中有以下逻辑。 这里完成了什么? 如果color为null,替换为'' IF ISNULL(@color, '') <> '' BEGIN END 最佳答案 它等同于: IF (@colo
我知道.Net中的接口(interface)定义了接口(interface)和继承它的类之间的契约。刚刚完成了一个大量使用数据访问层接口(interface)的项目,这让我开始思考。 . .有什么大不
如何防止基类方法被子类覆盖 最佳答案 您不需要做任何特别的事情:默认情况下方法是不可覆盖的。相反,如果您希望该方法可重写,则必须将 virtual 关键字添加到其声明中。 但是请注意,即使方法不可重写
我已阅读以下有关工厂模式的文章 here 请仅引用Class Registration - avoiding reflection这一部分。 这个版本在没有反射的情况下实现了工厂和具体产品之间的减少耦
我正在学习 Java 类(class),但无法完全理解下一课的内容。 目的:本课的目的是通过创建一个模拟 for-each 循环如何工作的替代方案来解释 for-each 循环的工作方式。 在上一课中
我是一名优秀的程序员,十分优秀!