我从旧项目中获取代码:
inline bool timer_timestamp_less(uint32_t t1,uint32_t t2){
return (t1-t2)>(1U<<31);
}
某处:
if(!timer_timestamp_less(t1,t2)) ..
头疼之后,我明白代码是等价的
if(t1>t2)...
我的前任有缺乏咖啡馆的代码。或者我认为太简单了?
答案 0 :(得分:3)
在所有情况下,您的重构都无法恢复相同的结果:if(!timer_timestamp_less(t1, t2))
几乎与if(t1 > t2)
相同。
原始实现似乎依赖于表达式t1 - t2
的明确定义的环绕行为,对于t2
大于{{1}的情况,它将在最重要的位中注入1并且t1
和t1
都没有将原始位设置为1.(在后一种情况下,行为要复杂得多。)
对于[0,2 31 - 1]范围内t2
和t1
的值,等效表达式实际上是t2
。目前,您的方式与!(t1 < t2)
和t1
相等的情况有所不同:
t2