DWORD类型数据与int类型数据进行比较时,判断条件居然每次都成立,简直是匪夷所思了!
我的代码是这样的:
就是上面这短短的代码,乍眼一看,怎么会出错误呢?其实,这里面的问题确实很大!
思路1
我以为是dwStartTime - dwEndTime计算的值有问题,就进行日志输出。
首先,我将两个数据的差值直接输出了,输出方式:
输出的内容居然是一个很大的值,由此,我就怀疑是不是有一个数值是不是真的特别大?
后来,我就对两个数据分别进行输出,发现,目测差值也不会大于500。
那是什么原因导致每次都进入if循环呢?
思路2
是不是因为采用fabs的原因?
为了验证我的想法,重新修改了下函数
运行程序发现,与使用fabs的效果一致,说明与fabs函数无关。
那就剩下一种可能了,DWORD类型与int比较时出问题了。
思路3
为了验证该想法,将DWORD计算的差值转成int类型,代码如下:
运行程序后发现,果真是这样的,DWORD类型数据与int类型数据在做比较时,确实有问题。
其实,到这里也并不算真正的将问题解决好。
DWORD代表的是unsigned long类型,只有正数没有负数;
int代表的是整型,可以是负数也可以是正数
因为在程序运行时,并不清楚两个DWORD类型哪个大时,就会出现我今天遇到的问题。
主要核心是这里:
当一个数值大的DWORD类型 - 数值小的DWORD类型,差值是一个特别大的值。
由此可以得出,在与其他值进行比较时,首先需要判断DWORD值是否有效,再进行后续操作!
领取专属 10元无门槛券
私享最新 技术干货