|
本帖最后由 lanpad 于 2012-11-4 16:30 编辑
程序中有很大的数需要用到32位的无符号长整型数
写了一个测试程序:
uchar compute(uint data)//ulint compute(uint data)
{
unsigned long result;
uchar r1,r2,r3,r4;
result = data*(data+1);
r1 = result;
r2 = (result>>8);
r3 = (result>>16);
r4 = (result>>24);
return(r3);
}
结果r1、r2可以正常返回计算所得的值
r3、r4的返回值全是0x00,
难道ICCAVR不支持32位的运算,不过我看了Help里Data Type Sizes
TYPE SIZE (bytes) RANGE
unsigned char 1 0..255
signed char 1 -128..127
char (*) 1 0..255
unsigned short 2 0..65535
(signed) short 2 -32768..32767
unsigned int 2 0..65535
(signed) int 2 -32768..32767
pointer 2 N/A
unsigned long 4 0..4294967295
(signed) long 4 -2147483648..2147483647
float 4 +/-1.175e-38..3.40e+38
double 4 +/-1.175e-38..3.40e+38
应该是支持的呀
可为什么数据计算结果高16位始终为0呢?
头文件添加了以下这些:
#include <iom128v.h>
#include <macros.h>
#include <limits.h> |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|