dws1966 发表于 2024-6-10 00:16:45

请教C51中的一个数学运算错误 | 强制类型转换

我有个这样的运算,在设定m1为uint,x1为ulong时,在设定公式X1=m1*1000,结果出现了错误。
比如m1=512.经过上述运算,结果为53248(应该为512000),不知道是什么原因。



这个问题困扰了我很久,不知道该如何解决

jwd 发表于 2024-6-10 06:29:21

类型转换的问题

jwd 发表于 2024-6-10 06:37:02

看看这是不是你要的数?就取了低32位

jwd 发表于 2024-6-10 06:50:04

你可以这样操作就行

jwd 发表于 2024-6-10 06:55:46

运算结果如下:

zhang32568 发表于 2024-6-10 07:21:24

强制数据类型转换

soma 发表于 2024-6-10 08:39:14

又学到了,原理unsigned int 要变unsigned long之前要强制转换,否则超65535会出错啊。

yjawei 发表于 2024-6-10 09:38:47

如果m1为uint是16位的话,2的16次方能表示最大值是65535,而m1=512*1000后的值明显已经溢出

yjawei 发表于 2024-6-10 10:03:26



53248就是512000转换成二进制后,低16位的值(高位已经被裁掉)。懂了吧。

wjhhhhh 发表于 2024-6-10 10:52:32

试一下X1=((ulong)(m1))* 1000    这样? 行吗?
页: [1] 2
查看完整版本: 请教C51中的一个数学运算错误 | 强制类型转换