有时候,我们会遇到一些WrapRound的计算,比如数字电视TS中DTS或PCR的计算,需要考虑WrapRound的问题。一般方法可以采用判断的方法,比如对于如下的计算:
 
const __int64 DTS_MOD = 0x200000000;//定义DTS的模__int64 dts_1, dts_2, value;
 
//calc dts_1-dts-2 if (dts_1 >= dts-2)   value = dts_1 - dts_2;else    value = DTS_MOD - dts_2 + dts_1;
 
另外,我们也可以通过如下方法进行计算:const int DTS_MAX = 0x1ffffffff;//0x1ffffffff 为33位最大值
 
__int64 dts_1, dts_2, value;
 
//calc dts_1-dts-2 value = (dts_1 - dts_2) & DTS_MAX;
 
该方法充分利用了正数和负数在表示上的区别。
 
后一种方法在可读性差一些,但在运行运行效率上可能会高一些。