c - C 文字和溢出
问题描述
在我的机器上,anint
是 32 位,下面的代码:
int64_t m = (int64_t) 1 << 60;
int64_t n = (int64_t) 2048 * 2048 * 2048;
给出 2^60 和 2^33 的数学预期结果,即使标准似乎说 1 和 2048 应该被视为“int”。
我应该认为这个结果是运气,还是 C99 标准保证我不会溢出?
解决方案
铸造优先于许多其他操作,您可以在此处查看顺序http://users.eecs.northwestern.edu/~wkliao/op-prec.htm
所以你实际上一直在使用 int64_t (顾名思义,它是一个 64 位的有符号整数),这就是你不会溢出的原因。
推荐阅读
- python - 带有麦克风输入的 Python Librosa
- docker - 推送 docker 映像时,Github 包注册表不会覆盖标签
- selenium - 在 Selenium IDE 中执行测试套件而不刷新页面
- python - 运行 manage.py 时,将本地 Django 项目迁移到 pythonanywhere 会引发不正确的时区错误
- unity3d - 对象引用未设置为 UnityEngine 对象的实例
- windows - Powershell 脚本 - 仅在驱动器空间低于 MinThreshold 时发送电子邮件
- python - Python; 计算转发的推文数量
- python - 安装 docker-compose 时出错 (def _collate(*iterables, key=lambda a: a, reverse=False)
- ruby - 无法使数组在 Ruby 中唯一
- c# - 将 ItemsControl 绑定到嵌套 itemscontrol 中的两个列表