You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请教:为何这段C#代码永远不会返回负值?

问题原因解析

这是C#里无符号byte类型的特性,加上整数强制转换的溢出规则导致的,具体可以拆成这几点看:

  • 运算时自动提升为int类型计算
    C#里byte、short这类小整数参与运算时,会先转成int类型再计算。拿你给的例子说:byte.MaxValue是255(转成int),b=254也转成int,index=47本身是int,所以算出来的结果是255-254-47-1 = -47,这是个int类型的负数。

  • 强制转byte时的溢出处理
    byte是无符号的8位整数,只能存0到255之间的数。把超出范围的int值转成byte时,C#会自动对数值做模256运算——也就是反复加或减256,直到结果落在0-255里。
    你的例子里-47加256等于209,所以最终返回的byte值就是209。

  • 为什么永远不会返回负值?
    因为byte本身就没有负数的取值空间,不管转换前的数值是正还是负,转成byte后都会被映射到0到255的范围内,自然不可能出现负数。

额外提一句:如果在C#里开了checked模式(比如用checked{}包裹代码),这种溢出转换会直接抛异常,但默认编译模式是unchecked,所以会自动做模运算处理。

内容的提问来源于stack exchange,提问作者Ilya Krivenok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 16:55:24