Tag: 乘以

检测uint64_t整数溢出与C的乘法

是否有任何有效且可移植的方法来检查C中的int64_t或uint64_t操作数的乘法运算何时溢出? 例如,为了添加uint64_t,我可以这样做: if (UINT64_MAX – a < b) overflow_detected(); else sum = a + b; 但我无法得到一个类似的乘法相似的简单表达式。 对我来说,所有这一切都将操作数分解为高和低uint32_t部分,并在检查溢出时执行这些部分的乘法,这些内容非常难看,也可能效率低下。 更新1 :添加了一些实现多种方法的基准代码 更新2 :添加了Jens Gustedt方法 基准程序: #include #include #include #define N 100000000 int d = 2; #define POW_2_64 ((double)(1 << 31) * (double)(1 << 31) * 4) #define calc_b (a + c) // #define calc_b (a + d) […]

long long vs int multiplication

给出以下代码段: #include typedef signed long long int64; typedef signed int int32; typedef signed char int8; int main() { printf(“%i\n”, sizeof(int8)); printf(“%i\n”, sizeof(int32)); printf(“%i\n”, sizeof(int64)); int8 a = 100; int8 b = 100; int32 c = a * b; printf(“%i\n”, c); int32 d = 1000000000; int32 e = 1000000000; int64 f = d * e; printf(“%I64d\n”, […]