运行系统:
window7 x64位操作系统,AMD CPU
编译环境;
vc90x64
在MFC中执行下面的语句:原语句是 (UINT(1) - UINT(4) + UINT64(5) ) % UINT64(5)
( UINT(-3) + UINT64(5) ) % UINT64(5)
得出的结果是:3 ( -3 + 5 ) % 5 竟然等于了3!!!
UINT(-3): 0xFFFF FFFD
UINT64(-3):0xFFFF FFFF FFFF FFFD
UINT64(5):0x0000 0000 0000 0005
出现问题的原因是什么?进行了一些其它计算,结果如下:
(UINT(-3) + UINT(5)) % UINT64(5) == 2
(UINT(-3) + UINT(5)) % UINT(5) == 2
(INT(-3) + UINT(5)) % UINT64(5) == 2
UINT(-3) + UINT64(5) == 2
在大多数情况下 都会是正确的,问题原因还不清楚,但问题产生的条件清楚,为如下:
1. % 被余数 为 UINT(负数) + UINT64(整数),这个存在着负数转UINT,UINT与UINT64相加
2. %余数 为 UINT64 整数
当前未找到问题的真实原因,当前作为一个案例,避免使用到 UINT 负值的情况,避免使用UINT 溢出效果。
Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源