SDL中文论坛

标题: C的数值计算 [打印本页]

作者: ancientcc    时间: 2016-7-14 11:10
标题: C的数值计算
本帖最后由 ancientcc 于 2016-7-14 11:15 编辑

负数乘上100结果是正值
  1. for (Sint16 s = -32767; s < 32768; s += 4096) {
  2.         Sint16 s1 = (s * 100);
  3.         Sint16 s2 = (s * 100) / 128;
  4.         posix_print("s: %i, s1: %i, s2: %i\n", s, s1, s2);
  5. }
  6. 计算结果
  7. s: -32767, s1: 100, s2: -25599
  8. s: -28671, s1: 16484, s2: -22399
  9. s: -24575, s1: -32668, s2: -19199
  10. s: -20479, s1: -16284, s2: -15999
  11. s: -16383, s1: 100, s2: -12799
  12. s: -12287, s1: 16484, s2: -9599
  13. ......
复制代码


以第一个为例,s: -32767
(, 下载次数: 1938)
-32767 * 100 = -32767100,此时并不关心位溢出,结果还是直接取后16位,导致负数乘上100结果是正值!

在设置变量类型时要注意该数值会出现的范围。




欢迎光临 SDL中文论坛 (http://www.libsdl.cn/bbs/) Powered by Discuz! X3.3