if (abs(u) > Vdc)
u = Vdc*((u > 0) - (u < 0));
考虑到我们输入 if 条件,这段代码在 C 中会发生什么?直流电压 = 24;考虑 u 的任意值来解释
如果u > 0语句将变为1 - 0(true - false) = 1。如果u < 0会变成-1. 如果它为零,它也将变为0。所以基本上它是返回的“符号” u(或更准确地说1是带有相应的符号)。整个代码片段用于夹u在+Vdc和之间-Vdc。(如建议的那样,它仅适用于 positive Vdc)。
括号中的表达式是符号函数。如果u > 0成立,则表达式变为
(u > 0) - (u < 0) -> 1 - 0 -> 1
因为第一个条件为真,第二个条件为假。同样的u < 0情况。
这是一种对函数进行建模的技术
|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
这是数学函数Sign 它的值是
这是它的工作原理:
根据 C 标准第 6.5.8 节关系运算符
如果指定的关系为真,则应产生 1,如果为假,则应产生 0。结果的类型为 int。
现在如果 u 大于 0 则u > 0返回 1 并u < 0返回 0。1-0是 1,例如,任何u大于 0 的都转换为 1。类似地,任何u小于 0 的都将转换为 -1。