我是一个编程初学者,我正在学习C整数溢出,我发现很难理解整数溢出输出的概念,我有几个问题:
包。
我完全不明白这里说的是什么,“结果的最不重要的可表示数字被存储”和“结果被说成是围绕最大值(即模一个基数的幂”),最后是什么意思“溢出将结果降低到模n次方,只保留最不重要的位”,能不能有人用例子向我解释这一点,我一点也不明白。
上一次我问这个问题时,它被关闭为一个副本,与所谓的“重复”问题的重复链接对我没有任何帮助,也没有回答我的问题,因为它是如此模糊,不像我想要理解的那样深入。
发布于 2020-07-15 21:14:54
对于任何正整数N,当用直接二进制表示法表示数学整数时,从最后N位为零的数中减去1将产生最后N位全部为1的数,而在最后一位全部为1的二进制数中添加一个数将产生一个数,其最后N位都为零,与任何上位的值无关。此外,对于任何N,由于任何N的最后N位数为零,从零中减去1将产生最后N位全部为1的数。因此,值-1实际上是1位的无限数。
由于使用无限位数来保存值-1是不切实际的,计算机通常使用一种约定,即在有符号数中最重要的表示位左边的所有位都具有与该位相同的值。这会导致最重要位的值表现为负数,其大小与无符号值相同。
在像Java这样的语言中,或者在Dennis发明的C方言中,包含有符号整数的计算将被处理,就像计算了可表示的位一样,然后上层位的值通过无限数量的上位进行“符号扩展”。由于某些计算机的行为不同,标准允许实现以任意不同的方式运行。一些“聪明”的实现,如gcc,将此解释为在整数溢出发生时,即使在整数溢出行为可预见的平台上运行时,也会发出无意义行为的邀请。
https://stackoverflow.com/questions/62728125
复制相似问题