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);也能得到正确结果,想知道下具体的出错原因。
不胜感激。
#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);也能得到正确结果,想知道下具体的出错原因。
不胜感激。
...全文
相关推荐
U64K1LED软件
**安全与稳定性**:作为一款早期的控制软件,U64K1可能会注重软件的稳定性和安全性,防止数据丢失或播放中断。8.
C语言printf打印数据类型[项目代码]
本文详细介绍了C语言中各种数据类型(如u8、s8、u16、s16、u64、double、float等)在printf函数中的打印格式。首先解释了这些数据类型的定义,包括有符号和无符号的char、sho
java jdk8u64位
根据提供的文件信息,本文将详细介绍Java JDK 8 Update 64位版本的相关知识点,包括其在Windows 64位系统下的安装与配置方法、新特性介绍以及如何利用这些新特性来提升开发效率。
C 学习笔记
根据提供的信息,我们可以总结出这份文档是关于C语言学习笔记的一部分,主要聚焦于C99标准及其相关的基础知识、数据类型等内容。
Linux内核分析及编程.pdf
内核提供了多种数据类型,如s8、u8、s16、u16、s32、u32、s64、u64等。在头文件<Linux/types.h>中定义了这些数据类型。


