if (abs(u) > Vdc)
u = Vdc*((u > 0) - (u < 0));
此代码位于C中 考虑到我们进入if条件会发生什么? Vdc = 24; 考虑任何任意的u值来解释
答案 0 :(得分:7)
如果u > 0
语句将变为1 - 0
(true - false)= 1
。如果u < 0
它将成为-1
。如果它为零,它也将变为0
。所以基本上它正在返回&#34;标志&#34; u
(或更确切地说1
具有相应的符号)。整个代码段用于在u
和+Vdc
之间限制-Vdc
。 (如建议的那样,它仅适用于积极的Vdc
)。
答案 1 :(得分:5)
括号中的表达式是符号函数。
如果u > 0
成立,则表达式变为
(u > 0) - (u < 0) -> 1 - 0 -> 1
因为第一个条件为真,第二个条件为假。
与u < 0
案例相同。
答案 2 :(得分: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
答案 3 :(得分:2)
这是数学函数Sign 它的价值是
这是它的工作原理:
根据C标准6.5.8关系运算符
如果指定的关系为真,则应为1,如果为假,则为0。结果的类型为int。
现在,如果u大于0,则u > 0
返回1而u < 0
返回0. 1-0
为1,例如大于0的任何u
转换为1.同样,任何小于0的u
都会转换为-1。