谁能告诉我这段代码是如何工作的?
int Calc(int *arr, int m)
int result;
for (result &= 0; m; (arr[--m] & (0x1 << 0x1F)) ? result += arr[m]: Void());
return result;
我不明白for循环:/
第1部分
首先result &= 0
用于通过按位运算设置0
为result
变量AND
。逐位为0将永远返回0。
您可以这样简单地编写它: result = 0
更好的方法(更好)是:result ^= result
。(按位XOR
)
第2部分
当m
大于(或小于)0时,此循环将迭代。因为ifm
将返回表达式。true
m != 0
这样做是非常安全的方法m > 0
。
您也可以使用此表达式,这并不能使程序达到最佳状态,但是对于另一个程序员来说,理解代码会更简洁!!m
:(将m
变量投射到bool),它等于m != 0
;
第三部分
在此部分中,使用三元运算符(logical_expression ? expression_1 : expression_2
)。如果logical_expression
为true
,expression_1
则将被执行,expression_2
否则将被执行。
因此,在您的代码中,如果此表达式(arr[--m] & (0x1 << 0x1F))
返回,true
则将我们添加arr[m]
到result
变量中。在另一种情况下什么也不做。
同样,m
变量在三元逻辑表达式(arr[--m]
)中递减。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句