这个代码块在做什么? (u > 0) - (u < 0)
What is this code block doing ? (u > 0) - (u < 0)
if (abs(u) > Vdc)
u = Vdc*((u > 0) - (u < 0));
此代码为 C 语言
考虑到我们进入 if 条件会发生什么?
Vdc = 24;
考虑 u 的任意值作为解释
括号内的表达式为符号函数。
如果 u > 0
成立,则表达式变为
(u > 0) - (u < 0) -> 1 - 0 -> 1
因为第一个条件为真,第二个为假。
u < 0
案例也是如此。
如果 u > 0
语句将变为 1 - 0
(true - false) = 1
。如果 u < 0
它将变为 -1
。如果它是零,它也会变成 0
。所以基本上它返回 u
的 "sign" (或者更准确地说 1
带有相应的符号)。整个代码片段用于将 u
夹在 +Vdc
和 -Vdc
之间。 (如建议的那样,它仅适用于正数 Vdc
)。
这是一种函数建模技术
|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
它的值为
- 1 如果你 > 0
- 0 如果你 = 0
- -1 如果你 < 0
这是它的工作原理:
根据 C 标准第 6.5.8 节关系运算符
shall yield 1 if the specified relation is true and 0 if it is false. The result has type int.
现在如果 u 大于 0 那么 u > 0
returns 1 和 u < 0
returns 0。1-0
是 1,例如任何大于 0 的 u
都转换为 1。类似地,任何小于 0 的 u
都转换为 -1。
if (abs(u) > Vdc)
u = Vdc*((u > 0) - (u < 0));
此代码为 C 语言 考虑到我们进入 if 条件会发生什么? Vdc = 24; 考虑 u 的任意值作为解释
括号内的表达式为符号函数。
如果 u > 0
成立,则表达式变为
(u > 0) - (u < 0) -> 1 - 0 -> 1
因为第一个条件为真,第二个为假。
u < 0
案例也是如此。
如果 u > 0
语句将变为 1 - 0
(true - false) = 1
。如果 u < 0
它将变为 -1
。如果它是零,它也会变成 0
。所以基本上它返回 u
的 "sign" (或者更准确地说 1
带有相应的符号)。整个代码片段用于将 u
夹在 +Vdc
和 -Vdc
之间。 (如建议的那样,它仅适用于正数 Vdc
)。
这是一种函数建模技术
|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 它的值为
- 1 如果你 > 0
- 0 如果你 = 0
- -1 如果你 < 0
这是它的工作原理:
根据 C 标准第 6.5.8 节关系运算符
shall yield 1 if the specified relation is true and 0 if it is false. The result has type int.
现在如果 u 大于 0 那么 u > 0
returns 1 和 u < 0
returns 0。1-0
是 1,例如任何大于 0 的 u
都转换为 1。类似地,任何小于 0 的 u
都转换为 -1。