|
LPC1765 程序大致如下:
unsigned long long a,b; //64bit
unsigned long c,d; //32bit
c=10000ul; d=20000ul;
a=(unsigned long long)c*c;
b=(unsigned long long)d*d;
printf("a=%llu,b=%llu\r\n",a,b);
输出后值时错误的,有时只取到高32bit,或将计算的低32bit放到了高32bit。貌似内存重叠,
将printf("a=%llu,b=%llu\r\n",a,b);
改成printf("a=%llu,b=%llu\r\n",(unsigned long long)a,(unsigned long long)b); 也不对!
不知怎么才能计算正确。看keil帮助文档,说支持64bit整型。
在VC里验证,将long long改成__int64,%llu改成%I64u,结果是对的,说明VC直接运算是没有错误的。
版本信息:
IDE-Version:
μVision V4.03
Copyright (c) Keil Elektronik GmbH / Keil Software, Inc. 1995 - 2009
Tool Version Numbers:
Toolchain: RealView MDK-ARM Version: 4.10
Toolchain Path: BIN40\
C Compiler: Armcc.Exe V4.0.0.728
Assembler: Armasm.Exe V4.0.0.728
Linker/Locator: ArmLink.Exe V4.0.0.728
Librarian: ArmAr.Exe V4.0.0.728
Hex Converter: FromElf.Exe V4.0.0.728
CPU DLL: SARMCM3.DLL V4.10
Dialog DLL: DARMP1.DLL V1.13
Target DLL: ..\TKScope\UL2ARM_TKSCP_DRV_ARM_for_AGDI.dll
Dialog DLL: TARMP1.DLL V1.13
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|