SDL中文论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3970|回复: 0
打印 上一主题 下一主题

[C/C++] C的数值计算

[复制链接]

149

主题

331

帖子

2445

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2445
跳转到指定楼层
楼主
发表于 2016-7-14 11:10:54 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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

-32767 * 100 = -32767100,此时并不关心位溢出,结果还是直接取后16位,导致负数乘上100结果是正值!

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|丽谷软件|libsdl.cn

GMT+8, 2025-5-2 01:02 , Processed in 0.074553 second(s), 22 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表