在MSDOS编译器上,用大于最大值的值初始化int时输出混乱

Mangling of output on initialising an int with a larger-than-the-maximum value on an MSDOS compiler

本文关键字:初始化 int 混乱 输出 最大值 编译器 MSDOS 大于      更新时间:2023-10-16

在一本关于C++编程的书中,有一个问题是:"int变量x的初始化值为92126。当它在MS-DOS编译器上运行时,结果会是什么?">

答案是,由于x=92126大于int变量在MS-DOS编译器上可以存储的最大值(即32767(,因此x将被损坏,输出将为26590。

我不明白什么是"损毁"。我在网上找不到任何关于它的信息。所以,我不知道为什么结果是26590。我认为,如果有什么不同的话,因为可能的最大值是32767,那应该是结果。但我不确定。我需要一些帮助。

这是本书中包含问题(问题4.1(及其解决方案的章节的链接:https://www.safaribooksonline.com/library/view/practical-c-programming/0596004192/ch04.html

扔掉这本书。

没有好的答案。从C++的角度来看,"紫色"是一个有效的结果。相关术语不是"损毁",而是未定义的行为。从字面上看,任何事情都可能发生。毫无疑问,x保持一个数值,甚至x随后存在都没有限制。

这是未定义行为的原因是因为它是signed整数溢出。unsigned int x = 92,126UL将是另一回事,当目标系统具有16位整数(就像MS-DOS一样(时,它明确地为26590