整数溢出概念
Integer overflow concept
int溢出是如何工作的。我的意思是问,如果发生溢出,整数值的最终结果是什么?我需要把它写下来。就像给我一个选择题:
11 ^ 5生产:
12。
B.
C.
d。17。
我知道答案是(b)14
,但想知道为什么?
DecVal BinVal
11 -> 1011
XOR 5 -> 0101
-------
14 -> 1110
供参考,这与int溢出没有任何关系。
既然你在问环绕,我就在下面回答。但是从注释中可以清楚地看出,您确实尝试了c++表达式11^5
,这是一个位级异或,并得到了与环绕无关的答案14。每对比特的异或结果如果相同为0,如果不同为1。
现在,在下面的^表示取幂;这是常用的符号
11^5 = 161051.
现在考虑一种情况,16位用来表示整数,只有幅度,没有符号。即16位无符号c++整型。那么就有2^16种可能的位模式,它们被编号为0到2^16 - 1,并表示这些数字。
161051大于该16位类型的最大可能值。如果正好是2^16,则对应于0(称为环绕),如果是2^16 + 1,则对应于1,以此类推。所以它对应于161051 - 2^16。
如果它也大于2^16 - 1,你会重复这个过程。
得到整数除法的余数除以2^16。
本质上它只对应于除去除16位最低有效位外的所有位。
顺便说一下,这个例子的结果不是您选择的(a), (b), (c)或(d)。
相关文章:
- 整数溢出,最大值为 pow(10,19)
- 模函数,避免C++整数溢出
- 优化正在杀死我在 clang 6 中的整数溢出检查
- 从双精度转换为整数的显式类型是否始终检查整数溢出?
- 我在c++中遇到了一个奇怪的错误,其中一个计算2个小整数加法的语句溢出到一个长值中
- 将字符串转换为整数类型T,检查是否存在溢出
- 运行时错误:有符号整数溢出:964632435 * 10 无法在类型 'int' 中表示
- 结构上溢出的整数加法
- 我很难理解这些关于检测整数溢出的评论
- 检测 32 位整数溢出
- 32 位整数缩放,无溢出
- 如何在没有整数溢出的情况下找到n%(k*k)
- C 中俄罗斯农民算法中的整数溢出
- 快速方法可以将整数乘以适当的分数,而无需浮点或溢出
- C 和 C++ 中的整数计算溢出
- 检查Android NDK COD中的整数溢出
- 是否有一些有意义的统计数据来证明保持有符号整数算术溢出未定义是合理的
- 对于特定情况的整数溢出似乎是由整数溢出引起的错误
- 如何修复整数溢出警告
- 我可以在C/ c++中指定是否封顶或溢出整数吗?