TOGOUTECH

integer-overflow

全部标签

go - Go 允许算术运算溢出而不是抛出异常是预期的行为吗?

我正在将一些Go代码移植到Rust,我意识到Rust会在乘法期间发生溢出时发生panic,而Go允许发生溢出。下面的测试代码,不会导致溢出但会打印减少的值。(测试通过:https://play.golang.org/)funcmain(){fmt.Println("test\n")varkeyuint64=15000;key=key*2862933555777941757+1fmt.Println(key)} 最佳答案 Spec:Integeroverflow:Forunsignedintegervalues,theoperatio

go - 如何在 Go 中将常量设置为负值

我正在用Go编写代码来调用一些Windows信任和加密dll来验证文件签名。wincrypt.h中有许多常量,我曾尝试逐字移植,但我遇到了一些整数溢出问题。例如,所有可以从WinVerifyTrust返回的错误代码都是负值。如果我举一个例子,TRUST_E_NOSIGNATURE,这是在winerror.h中定义的:#defineTRUST_E_NOSIGNATURE_HRESULT_TYPEDEF_(0x800B0100L)。在我的Go代码中,我有constTRUST_E_NOSIGNATURE=int32(0x800B0100)但是编译时的错误是:常量2148204800溢出int

go - 原子 AddUint32 溢出

我正在使用以下代码在进程中获取唯一ID:fori:=0;i如果计数器值溢出uint32的限制会发生什么? 最佳答案 值环绕,很容易证明:u:=uint32(math.MaxUint32)fmt.Println(u)u++fmt.Println(u)//oru=math.MaxUint32atomic.AddUint32(&u,1)fmt.Println(u)https://play.golang.org/p/lCOM3nMYNc 关于go-原子AddUint32溢出,我们在StackOv

go - golang常量溢出uint64有什么问题

userid:=12345did:=(userid&^(0xFFFF编译这段代码时,我得到:./xxxx.go:511:constant-18446462598732840961overflowsint您知道这是怎么回事以及如何解决吗?谢谢。 最佳答案 ^(0xFFFF是一个无类型常量,在go中是一个任意大的值。0xffff是0xffff000000000000.当你否定它时,你会得到-0xffff000000000001(因为有二进制补码,-x=^x+1,或^x=-(x+1))。当你写userid:=12345,userid获取类

c# - 将整数值递增到超出其整数限制 - C#

我有一个for循环,它不断递增一个整数值,直到循环完成。因此,如果限制n是一个double变量并且递增的变量“i”是一个整数,则i会增加到超出其限制。doubletotal=0;doublenumber=hugetValue;for(inti=1;i如果“i”超出其容量会怎样?i的值如何变化?我会遇到运行时错误吗? 最佳答案 类似于C的某些实现中的行为,其中int只是从INT_MAX到INT_MIN循环(尽管根据ISO标准,它实际上是未定义的行为),C#也进行循环。在VS2008中测试它:intx=2147483647;if(x+1

java - 为什么整数数据类型会悄悄溢出而不是抛出异常

我了解到(至少在Java中)整数/长值会悄无声息地溢出,并且它们的值会在溢出时从最小值重新开始,而不是抛出任何异常。我正在使用外部api进行某些文件操作,其中最大文件大小是从属性文件加载的。在我的本地测试环境中一切正常。代码进入实时环境后,最大文件大小限制根本不起作用。经过两天的调试/分析代码,完全没有成功。然后出于某些其他原因,我使用了实时constants.properties文件并用它调试了代码。o_0我只想问,是什么阻止了他们在溢出时抛出异常? 最佳答案 在许多情况下,Java基于C或C++,而这些基于Assembly。上溢

java - 如何修复整数溢出产生的错误数字?

我有一个导致整数溢出的错误,导致错误(负)时间戳被写入数据库。代码已经修复,但我也想修复错误的数据。我想,我可以只取错误的结果并添加Integer.MAX_VALUE,但这似乎不起作用,它让我得到了很高的值。我在下面的代码片段中有offset值,但未存储输入值。以下代码重现了该错误:@TestpublicvoidtestArexxConversion(){//Theinputvaluesrepresentsecondssincemidnight,Jan1,2000UTCfinalintsample=361450072;//Asampleinputvaluedrawnfromproduc

java - 为什么,在 Java 算法中,上溢或下溢永远不会抛出异常?

在JavaArithmetic操作期间,JVM不会抛出Underflow或OverflowException。很多时候我们遇到意想不到的结果,想知道哪里出了问题。而在.NET技术的情况下,我们有溢出和取消流异常。所以我的问题是,为什么Java被设计成在算术运算期间不抛出这个异常 最佳答案 这可能是多种因素的结合:Java之前的主流语言使用未经检查的算术。容易出现数值溢出的著名算法倾向于在不依赖已检查算术的情况下解决潜在的溢出问题。经过检查的算术在大量使用算术指令的算法中引入了显着的开销,这会使Java处于明显的劣势,尤其是在基准测试

java - 为什么这个乘法整数溢出会导致零?

回答后thisquestion,我很困惑为什么这段代码中溢出的整数导致0而不是负数。很奇怪,为什么会有这么精确的数字?为什么是0?publicclassIntegerOverflow{publicstaticvoidmain(String[]args){intx=10;inti=0;for(i=0;i输出:10010000100000000187491942400 最佳答案 只有当x的起始值为偶数时才会发生这种情况。根据JLS§15.17.1:Ifanintegermultiplicationoverflows,thentheres

Java乘法运算行为

我写了一个方法将给定数字从天数转换为毫秒数:privatelongexpireTimeInMilliseconds;...publicvoidsetExpireTimeInDays(intexpireTimeInDays){expireTimeInMilliseconds=expireTimeInDays*24*60*60*1000;}我很难弄清楚我做错了什么。现在我的问题:这个错误这么明显吗?修正方法:privatelongexpireTimeInMilliseconds;...publicvoidsetExpireTimeInDays(intexpireTimeInDays){ex