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

Go使用位操作计算字符串ASCII和结果与JavaScript不一致如何解决

差异根因
  • JavaScript 中的位运算默认基于32位有符号整数执行,你代码中的t &= t操作会自动将结果截断为32位有符号整数,溢出的高位会直接丢弃。
  • Go 语言的int类型属于平台相关类型,64位系统下默认是64位有符号整数,运算过程中不会自动做32位截断,当累加结果超出32位整数范围后,就会和JS的输出结果出现差异。
  • 你现有Go代码中封装的CharCodeAt函数逻辑冗余,对于ASCII字符直接取字符串下标对应的字节转整数即可得到对应ASCII码,不需要额外做rune、string类型转换。
修复后代码
package main

import (
	"fmt"
)

func main() {
	fmt.Println(CountChars("Google"))  // 输出 2138589785,与JS结果一致
	fmt.Println(CountChars("Google1")) // 输出 1871773944,与JS结果一致
}

func CountChars(char string) int32 {
	// 明确使用32位有符号整数,完全对齐JS的运算逻辑
	var sum int32 = 0
	if char == "" {
		return sum
	}
	for x := 0; x < len(char); x++ {
		sum = (sum << 5) - sum + int32(char[x])
		sum &= sum
	}
	return sum
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:36:04