c 语言下,4294967295 不在 int 范围内,属于 uint 类型。
因此 r & 4294967295 实际上是在将 r 由 int 类型转换成 uint 类型。
但 js 中与运算的结果是 32 位有符号整数,也就是 int 类型。4294967295 用二进制表示就是 32 个 1。 r & 4294967295 的运算结果仍然是 r,没有达到类型转换的目的。
js 中有无符号右移这一个操作符,我们可以借助它将有符号整数转成无符号整数
t += (r & 4294967295) >>> 0