C语言 U64与U8计算求助
做了个U64结合U8的加法计算,可是在特定情况下得不到正确的结果,想求问大神了解下原因,代码如下:
#include<stdio.h>
typedef unsigned __int64 UINT64;
typedef unsigned char UINT8;
void test(void)
{
UINT8 a = 0xff;
UINT64 b = 0x00000000ffffff;
printf("a = 0x%x\n", a);
printf("a<<24 = 0x%x\n", a<<24);
printf("b = 0x%x\n", b);
printf("sum:b+a<<24 = 0x%016I64x\n", b+(a<<24));
}
main()
{
test();
}
上述代码其实就是把0xff000000加上0x00ffffff,期望得到0xffffffff。但是实际上得到的却是16个f。
尝试过把a改为0x11,结果就是正确的,同时尝试过把a改为UINT64,结果也是正确的。
而手动计算printf("0x%016I64x", 0xff000000+0x00ffffff);也能得到正确结果,想知道下具体的出错原因。
不胜感激。