|
本帖最后由 ancientcc 于 2016-7-14 11:15 编辑
负数乘上100结果是正值
- for (Sint16 s = -32767; s < 32768; s += 4096) {
- Sint16 s1 = (s * 100);
- Sint16 s2 = (s * 100) / 128;
- posix_print("s: %i, s1: %i, s2: %i\n", s, s1, s2);
- }
- 计算结果
- s: -32767, s1: 100, s2: -25599
- s: -28671, s1: 16484, s2: -22399
- s: -24575, s1: -32668, s2: -19199
- s: -20479, s1: -16284, s2: -15999
- s: -16383, s1: 100, s2: -12799
- s: -12287, s1: 16484, s2: -9599
- ......
复制代码
以第一个为例,s: -32767
-32767 * 100 = -32767100,此时并不关心位溢出,结果还是直接取后16位,导致负数乘上100结果是正值!
在设置变量类型时要注意该数值会出现的范围。 |
|