a=a+b和a+=b的区别

本文详细解析了C#中checked关键字在处理byte类型数据溢出时的行为,通过实例展示了a+=b与a=a+b在运算过程和结果上的差异,以及这种差异背后的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      本文的测试环境是VS2008,测试语言是C#。

      以前我一直认为a=a+b  a+=b没有什么区别,网上的一些人也认为这两句没有什么很大的区别。但是今天在用C#中checked关键字检查溢出的程序中发现用前者编译不能通过,后者可以,带着这个疑问,我又查了一些资料,终于有了一个合理的解释,如果有错误,希望大神指正。

      问题是这样的,byte类型的数据取值范围是0-255,在C#中定义两个byte型的变量,分别赋值100 200,求和,显然他们的和溢出了,于是要用checked语句检查溢出,我发现,当代码写成a+=b的时候,a的输出结果是44,显然,溢出影响了输出值,但是代码写成a=a+b根本就编译通不过,错误信息是不能把byte隐式的转化为int。我认为这个例子在侧面印证了a+=b比a=a+b的运行更快。

       a+=b是把b内存单元的值直接加到了a的内存单元,a=a+b是把a b内存单元的值分别拿出来,相加以后存到寄存器,再由寄存器存回a的内存单元,中间有了寄存器就存在了隐式转化的问题,而显然前者的运行速度更快,这就是我对于这个问题的理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值