请求解析C#中x = (a = b)表达式的执行逻辑
代码解析与运算符说明
先看你给出的C#代码:
long x = 0; long a = long.MaxValue; long b = long.MinValue; x = (a = b)
执行流程拆解
- 初始化变量
x:定义长整型变量x,初始值设为0。 - 初始化变量
a:将a的初始值设为长整型的最大值long.MaxValue(具体值为9223372036854775807)。 - 初始化变量
b:将b的初始值设为长整型的最小值long.MinValue(具体值为-9223372036854775808)。 - 嵌套赋值操作
x = (a = b):- 先执行括号内的
a = b:把b的值(长整型最小值)赋给a,此时a的值更新为long.MinValue。 - 赋值表达式
a = b本身会返回被赋的值(也就是long.MinValue),接着把这个返回值赋给x,最终x的值也变成long.MinValue。
- 先执行括号内的
最终状态:a和x的值都是long.MinValue,b的值保持初始的long.MinValue不变。
涉及的运算符
这里核心用到的是C#的赋值运算符(=),它有两个关键特性:
- 完成赋值动作:将右侧操作数的值赋给左侧的变量。
- 表达式有返回值:整个赋值表达式会返回被赋的值,这就支持嵌套赋值的写法(比如
x = a = b)。 - 赋值运算符是右结合的,所以即使去掉括号写成
x = a = b,执行顺序还是从右往左,结果和带括号的写法完全一致。
内容的提问来源于stack exchange,提问作者Hirow
相关产品推荐
相关产品推荐

