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

C#中int与byte类型相加相同数值,为何结果存在差异?

为什么C#中byte与int相加结果有差异?

这本质是C#的数值类型提升规则和byte类型的溢出特性导致的,具体原因如下:

  • byte的取值范围限制:byte是8位无符号整数,取值范围固定为0~255。当数值超出这个范围时,默认情况下会自动截断低8位(溢出),不会报错。
  • 算术运算的数值提升:C#规定,对byte、sbyte、short、ushort这类短整型执行算术运算时,编译器会先把它们隐式转换为int类型再计算。也就是说,两个byte相加的过程其实是:先把两个byte转成int,相加得到int结果,再把结果转回到byte(如果你赋值给byte变量的话)。
    举个实际例子:
    byte a = 255;
    byte b = 1;
    // 直接赋值给byte的情况:
    byte c = a + b; // 计算过程是int(255)+int(1)=256,转byte时截断低8位,结果为0
    // 转成int相加的情况:
    int d = (int)a + (int)b; // 结果是256,完全符合预期,因为int范围远大于byte
    
  • 溢出检查的影响:默认情况下C#在Release模式下不检查无符号整数的溢出,所以截断会悄悄发生。如果在checked块中执行赋值,就会直接抛出OverflowException,提醒你数值超出了byte的范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:31:13