integer-overflow相关内容
微软已经在GetTickCount的文档中说过,你不能比较滴答计数,以检查间隔是否已经过去。例如: 不正确(伪代码): code> DWORD endTime = GetTickCount + 10000; // 10 s from now ... if(GetTickCount> endTime) break; 上面的代码是坏的,因为它可以接受点击
..
答案 例如,假设一个类 TList = class private FCount:Cardinal; public 属性Count:Cardinal read FCount; 结束 这是有道理的,不是吗?存储在列表中的项目数量不能为负数,那么为什么不使用无符号整数类型呢?我认为总是使用最小的一般(最特殊的)类型是一个很好的原则。 现在
..
我正在实现一个数据库应用程序,我将使用JavaDB和MySQL作为数据库。我有一个ID列在我的表有整数作为类型,我使用数据库auto_increment函数的值。 但是,当我获得超过2或4)十亿个职位和整数还不够吗?是整数溢出并继续还是抛出一个异常,我可以处理? 是的,我可以更改为long作为数据类型,但如何检查什么时候需要?我认为如果我使用长数据类型作为ID列,获取last_inse
..
我想在clojure中计算!1000 ,我该怎么做而不会得到一个整数溢出异常? 我的阶乘代码现在是:(reduce *(range 1 1001))。 方案 您可以使用 *'运算符来支持任意精度,自动将结果提升到BigInt,以防溢出: (reduce *'(范围1 1001))
..
如果我在C中执行以下代码: #include uint16_t a = 4000; uint16_t b = 8000; int32_t c = a - b; printf(“%d”,c); 它正确打印“-4000”作为结果。但是,我有点困惑:从另一个减去一个更大的无符号整数应该不会有算术溢出?这里有什么规则?
..
我想写一个C ++模板函数,将在不同整数类型之间的转换中抛出一个运行时异常,这些类型有不同的宽度和可能的有符号/无符号不匹配。为了这些目的,我不关心从浮点类型转换为整数类型,也不担心其他对象到对象转换。我想这样做而不必编写大量的特殊情况代码。这是我目前有的: template void safe_cast(const T& source,R& result) {
..
好的,所以我有一些问题,C + + iostreams感觉很奇怪,但它可能是定义的行为,考虑到发生在MSVC ++和G ++。 我有这个程序: #include using namespace std; int main() { int a; cin>>一个; cout>一个; cout
..
让我们考虑将无符号短值(或任何其他无符号整数类型)的右N位置零的函数(它的可能实现之一)。可能的实现可能如下所示: template unsigned short zero_right(unsigned short arg){ 使用type = unsigned short; constexpr type mask =〜(type(0)
..
有2个大整数,x和y使得z = x * y溢出。 我想计算x的第一个数字。直接这样做是不可能的,因为结果溢出。 我想知道是否有一个特定的技术。 例如:10000000000000000000000000000000000 * 20579725928294522859735727575,这里的第一个数字是2,我可以直接看到,但是,除了这个特殊情况,有没有办法? #include
..
我知道(INT_MIN / -1)溢出,但是(INT_MIN%-1)不会溢出。至少这是在两个编译器中发生的,一个是前c ++ 11(VC ++ 2010)和另一个后c ++ 11 GCC 4.8.1 int x = INT_MIN; cout -2147483648 0
..
我有一个8个字符 string 表示一个十六进制数,我需要将它转换为 int 。此转换必须保留字符串“80000000”和更高位的位模式,即这些数字应为负数。不幸的是,天真的解决方案: int hex_str_to_int(const string hexStr) { stringstream strm; strm
..
每当我需要为二进制搜索等算法平均两个数字时,我总是这样做: int mid =低+((高 - 低)/ 2); 我最近看到了另一种在这篇文章,但我不明白。它说你可以在Java中这样做: int mid =(low + high)>>> 1; 或在C ++中: int mid =((unsigned int)low +(unsigned
..
每当我需要为二进制搜索等算法平均两个数字时,我总是这样做: int mid =低+((高 - 低)/ 2); 我最近看到了另一种方法,在这篇文章,但我不明白。它说你可以在Java中这样做: int mid =(low + high)>>> 1; 或在C ++中: int mid =((unsigned int)low +(unsign
..
请考虑以下代码: template struct integer_power_bounded { static_assert(Exponent> = 0, “integer_power_bounded中的错误:'指数> = 0'为假”); static constexpr std
..
在下面的程序中,第5行给出了预期的溢出警告,但令人惊讶的是第4行在GCC中没有给出任何警告:
..
在使用严格溢出标志编译以下内容时,它在第二个测试中告诉我,r可能不是我认为的: int32_t r(my_rand()); if(r
..
我想写一个C ++模板函数,将在不同整数类型之间的转换中抛出一个运行时异常,这些类型有不同的宽度和可能的有符号/无符号不匹配。为了这些目的,我不关心从浮点类型转换为整数类型,也不关心其他对象到对象转换。我想这样做而不必编写大量的特殊情况代码。这是我目前有的: template void safe_cast(const T& source,R& result) {
..
我只是想知道如何灾难性的整数溢出真的是。采取以下示例程序: #include int main() { int a = 46341; int b = a * a; std :: cout
..
有一个通用的方法来检查给定数据类型(uint32,int等)的溢出或下溢吗? 我正在这样做: uint32 a,b ,C; ... //初始化a,b,c if(b a - =(c-b) } 当我打印一些迭代后,它显示一个大数字,如:4294963846。 code> uint32 a,b; //赋值 uint32 result
..
所以我最近一直在实施米勒 - 拉宾素性测试。我把它限制在所有32位数字的范围,因为这是一个只是为了乐趣的项目,我正在做的是熟悉c ++,我不想与任何64位工作一会儿。另外一个好处是,该算法对所有32位数字都是确定性的,所以我可以显着提高效率,因为我知道什么证人要测试。 数字,算法工作异常好。然而,过程的一部分依赖于模幂运算,即(num ^ pow)%mod。因此,例如 3 ^ 2%5
..