C语言 U64与U8计算求助

antuicang9886 antuicang9886 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
做了个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);也能得到正确结果,想知道下具体的出错原因。

不胜感激。
...全文
评论 6
收藏 已收藏
分享
返回顶部
antuicang9886
C语言 70,039 成员 243,237 内容