4
if (abs(u) > Vdc)
    u = Vdc*((u > 0) - (u < 0));

考虑到我们输入 if 条件,这段代码在 C 中会发生什么?直流电压 = 24;考虑 u 的任意值来解释

4

4 回答 4

7

如果u > 0语句将变为1 - 0(true - false) = 1。如果u < 0会变成-1. 如果它为零,它也将变为0。所以基本上它是返回的“符号” u(或更准确地说1是带有相应的符号)。整个代码片段用于夹u+Vdc和之间-Vdc。(如建议的那样,它仅适用于 positive Vdc)。

于 2015-04-08T18:27:14.447 回答
5

括号中的表达式是符号函数。如果u > 0成立,则表达式变为

(u > 0) - (u < 0) -> 1 - 0 -> 1

因为第一个条件为真,第二个条件为假。同样的u < 0情况。

于 2015-04-08T18:24:09.487 回答
2

这是一种对函数进行建模的技术

    |0,  if u = 0
 f= |1,  if u > 0
    |-1, if u < 0

它避免使用 if 子句进行此比较,并像这样进行评估

//For positive values of u 
(u>0) - (u<0) = 1 - 0 = 1
//For negative values of u
(u>0) - (u<0) = 0 - 1 = -1
//For u = 0
(u>0) - (u<0) = 0 - 0 = 0
于 2015-04-08T18:30:36.547 回答
2

这是数学函数Sign 它的值是

  1. 1 如果你 > 0
  2. 0 如果你 = 0
  3. -1 如果你 < 0

这是它的工作原理:

根据 C 标准第 6.5.8 节关系运算符

如果指定的关系为真,则应产生 1,如果为假,则应产生 0。结果的类型为 int。

现在如果 u 大于 0 则u > 0返回 1 并u < 0返回 0。1-0是 1,例如,任何u大于 0 的都转换为 1。类似地,任何u小于 0 的都将转换为 -1。

于 2015-04-08T18:31:06.470 回答