renyaq 发表于 2022-6-8 20:03

报警提示 integer operation result is out of range

unsigned long cnt32;
unsignedint x,y;
x=400;
y=400;

cnt32 = x*y;   编译正常不报警,但运算结果为0x27100的低16位0x7100,而不0x27100

cnt32 = 400*400;   报警提示 integer operation result is out of range

请问,怎样才能得到正确结果.

llljh 发表于 2022-6-8 20:13

cnt32 =(unsigned long ) x*y;

heweibig 发表于 2022-6-8 20:20

感觉应该是类型不匹配吧。

jlyuan 发表于 2022-6-8 20:23

能给我份F28027的编程素材吗,我自己不会弄啊,按步骤来操作,编译还是出错

pengf 发表于 2022-6-8 20:54

就是一开始要添加的头文件和源文件什么的

huangchui 发表于 2022-6-8 21:58

楼上强制进行类型转换的,是可以的。

wyjie 发表于 2022-6-8 22:01

unsigned long是几位啊,提示是已溢出了

stly 发表于 2022-6-8 22:03

unsigned long是几个字节,400*400=160000,超界了吧

huangchui 发表于 2022-6-8 22:07

楼主看看不是改变了类型了。

jlyuan 发表于 2022-6-8 22:09

转换结果直接强制转换类型导致类型不匹配。

chuxh 发表于 2022-6-8 22:10

这个需要在执行的过程中做数据类型的强制转换的。

xxrs 发表于 2022-6-8 22:13

这个经常会遇到的,处理办法的楼上也说了的。

wyjie 发表于 2022-6-8 22:14

这样的问题还是能很容易解决的。

chuxh 发表于 2022-6-8 22:16

应该是超出了类型限制了。

supernan 发表于 2022-6-8 22:18

类型不匹配,会自动截取满足被赋值类型的数据,而你直接400*400,编译器会先计算再赋值,这样相当于赋值的是个常数,所以会报错。

jlyuan 发表于 2022-6-8 22:19

类型不匹配的问题

renyaq 发表于 2022-6-8 22:25

明白了,多谢大家讨论这么多哈
页: [1]
查看完整版本: 报警提示 integer operation result is out of range