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

Int32与Int64按位左移32位结果不同的原因及相关教程咨询

差异原因解答

这一运行结果差异是C#语言规范中移位运算的类型适配规则、以及运算符优先级共同决定的,具体拆解如下:

优先级说明

C#中左移运算符<<的优先级高于按位与运算符&,因此两段代码都是先执行左移运算,再执行按位与运算,不存在运算顺序的差异。

移位运算的类型规则

C#针对不同位宽的整数类型,对移位计数的处理逻辑不同:

  • 32位整数(int/uint,对应Int32):移位计数仅取二进制低5位,等价于实际移位位数 = 输入的移位数值 模32。也就是说移位超过31位时,只有低5位有效,比如写<<32就等价于<<0,相当于没有移位。
  • 64位整数(long/ulong,对应Int64):移位计数仅取二进制低6位,等价于实际移位位数 = 输入的移位数值 模64。移位不超过63位时都会正常执行,<<32属于有效移位。

两段代码的运行过程

test1 运算过程

var test1 = 1 & Int64.Parse("1") << 32; // 结果为0
  1. Int64.Parse("1")返回64位整数1
  2. 左移32位后得到值为4294967296(二进制最高位的1在第33位)
  3. 与1(二进制1在第1位)做按位与,没有重叠的有效位,结果为0

test2 运算过程

var test2 = 1 & Int32.Parse("1") << 32; // 结果为1,不符合预期的0
  1. Int32.Parse("1")返回32位整数1
  2. 左移32位时,实际移位位数为32 % 32 = 0,移位后数值仍为1
  3. 与1做按位与,结果为1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 08:54:08