如何在c语言中乘法32位整数

如何在c语言中乘法32位整数,c,gcc,cygwin,multiplication,C,Gcc,Cygwin,Multiplication,执行: #define HIGH32(V64) ((uint32_t)((V64 >> 32)&0xffFFffFF)) #define LOW32(V64) ((uint32_t)(V64&0xffFFffFF)) uint32_t a = 0xffFFffFF; uint32_t b = 0xffFFffFF; uint64_t res = a * b; printf("res = %08X %08X\n", HIGH32(res), LOW32(res));

执行:

#define HIGH32(V64) ((uint32_t)((V64 >> 32)&0xffFFffFF))
#define LOW32(V64) ((uint32_t)(V64&0xffFFffFF))

uint32_t a = 0xffFFffFF;
uint32_t b = 0xffFFffFF;
uint64_t res = a * b;
printf("res = %08X %08X\n", HIGH32(res), LOW32(res));
给出:

"res = 00000000 00000001"
但我希望:FFFFFFE00000001。我做错了什么?单一任务:

res = 0x0123456789ABCDEF;
printf("res = %08X %08X\n", HIGH32(res), LOW32(res));
给予

环境:

$gcc --version
gcc (GCC) 4.8.3
Copyright (C) 2013 Free Software Foundation, Inc.

$ gcc -v
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-pc-cygwin/4.8.3/lto-wrapper.exe
dest arch: i686-pc-cygwin

$ file a.exe
a.exe: PE32 executable (console) Intel 80386, for MS Windows
您目前有:

uint64_t res = (uint32_t) a * (uint32_t) b;
您需要在乘法之前将参数提升为64位数字。因此:

uint64_t res = (uint64_t) a * b;

谢谢,我认为乘法的结果比乘法宽两倍operands@user3479125这是一个x86汇编的东西。C返回相同的类型。当您乘+除两个整数时,这也很烦人,这可以在汇编中完全完成,但需要在C中进行强制转换才能完成。
uint64_t res = (uint64_t) a * b;