gpt4 book ai didi

overflow - Ada:整数溢出

转载 作者:行者123 更新时间:2023-12-01 14:15:17 25 4
gpt4 key购买 nike

所以我正在散列并定义了这些类型/函数:

subtype string2 is String(1..2);  
function cString2 is new Ada.Unchecked_Conversion(string2, long_integer);
function cChar is new Ada.Unchecked_Conversion(character, long_integer);

并且必须使用这个哈希函数:

HA = (((cString2(s1) + cString2(s2)) * 256) + cChar(char)) mod 128

(这个函数故意不好,但我必须实现它)当将 256 与两个长整数之和相加和/或尝试相乘时,就会出现问题,因为它会溢出。我需要以某种方式将字符串视为正整数值,并且不要让我的函数溢出。谢谢!!!

最佳答案

Long_Integer 类型是有符号整数类型,并保证覆盖 –2**31+1 .. +2**31–1 范围(如果它存在):

LRM 3.5.4(22):

If Long_Integer is predefined for an implementation, then its range shall include the range –2**31+1 .. +2**31–1.

通过您的声明,您可能会在转换后的值中包含至少 2 个字节的随机垃圾,但由于大小不匹配,结果是实现定义的,并且可能无效或异常。

我建议您阅读 LRM 中的 'Pos 属性和 Ada.Unchecked_Conversion .

关于overflow - Ada:整数溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43434369/

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