关于C#中布尔逻辑运算&与&&的疑问:为何firstNumber输出为1而非0?
C#中布尔
&与&&运算的差异解析 核心差异:是否执行全部操作数
&(逻辑与运算符):会强制计算所有参与运算的表达式,哪怕前面的结果已经能确定最终布尔值。
在你的代码里,true & false & (firstNumber++ > 0)中,尽管true & false已经得出false,但&仍会执行后面的firstNumber++,导致firstNumber从0自增为1。&&(短路与运算符):会进行短路求值——只要前面的表达式能确定最终结果,就不会再计算后续表达式。
代码里true && false已经得出false,所以后面的secondNumber++完全不会执行,secondNumber保持初始值0。
对应代码验证
static void Main(string[] args) { int firstNumber = 0; bool simpleLogicResult = true & false & (firstNumber++ > 0); Console.WriteLine($"firstNumber = {firstNumber}"); // 输出1,因执行了firstNumber++ int secondNumber = 0; bool shortCircuitResult = true && false && (secondNumber++ > 0); Console.WriteLine($"secondNumber = {secondNumber}"); // 输出0,因secondNumber++未执行 Console.ReadKey(); }
场景总结
- 若需要确保所有表达式的副作用(比如变量修改、方法调用)都被执行,用
&; - 若想优化性能或避免不必要的副作用,优先用
&&。
内容的提问来源于stack exchange,提问作者DeepBlue
相关产品推荐
相关产品推荐

