gpt4 book ai didi

ruby - 如何模拟 Fixnum 变量的整数溢出?

转载 作者:数据小太阳 更新时间:2023-10-29 07:05:52 24 4
gpt4 key购买 nike

我目前正在将一种算法从 Java 转换为 Ruby,但由于 Ruby 中缺少整数溢出,我遇到了一些障碍。

假设我的值为 2663860877,它大于最大整数 2147483648。

在 Java 中,它环绕,我应该得到 -1631106419。

我找到了这段代码,但它似乎不起作用:

def force_overflow(i)
if i < -2147483648
-(-(i) & 0xffffffff)
elsif i > 2147483647
i & 0xffffffff
else
i
end
end

并且'ing 变量不会像您期望的那样强制它为负。

最佳答案

假设 32 位整数具有二进制补码负数,这应该可行:

def force_overflow_signed(i)
force_overflow_unsigned(i + 2**31) - 2**31
end

def force_overflow_unsigned(i)
i % 2**32 # or equivalently: i & 0xffffffff
end

关于ruby - 如何模拟 Fixnum 变量的整数溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7365868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com