SDL中文论坛
标题:
C的数值计算
[打印本页]
作者:
ancientcc
时间:
2016-7-14 11:10
标题:
C的数值计算
本帖最后由 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
(, 下载次数: 1938)
上传
点击文件名下载附件
-32767 * 100 = -32767100,此时并不关心位溢出,结果还是直接取后16位,导致负数乘上100结果是正值!
在设置变量类型时要注意该数值会出现的范围。
欢迎光临 SDL中文论坛 (http://www.libsdl.cn/bbs/)
Powered by Discuz! X3.3