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

Go与C#左移运算结果差异原因及对齐方法

C#与Go左移运算结果不同的原因及对齐方法

差异原因

  • 默认整数类型宽度不同:C#里0x2555C6默认是32位有符号int,而Go在64位系统中0x2555C6默认是64位有符号int。
  • 溢出处理逻辑不同:
    • 先算基础值:0x2555C6转十进制是2440646,左移16位等价于乘以65536,结果为160352829440。
    • C#的32位int最大值是2147483647,这个结果远超上限,默认触发溢出截断,只保留低32位数值:160352829440 % 2^32 = 1439039488,这就是C#的输出。
    • Go的64位int能容纳完整结果,所以直接输出原始计算值。

让Go输出与C#对齐的方法

需要模拟C#的32位int溢出行为,有两种可行方式:

方式1:强制转换为int32类型

gLeftShift := int32(0x2555C6 << 0x10)
fmt.Println(gLeftShift)

方式2:手动对2^32取模

gLeftShift := 0x2555C6 << 0x10
fmt.Println(gLeftShift % (1 << 32))

两种方式的输出均为1439039488,与C#结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:50:31