在MSDOS编译器上,用大于最大值的值初始化int时输出混乱
Mangling of output on initialising an int with a larger-than-the-maximum value on an MSDOS compiler
在一本关于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
相关文章:
- 为什么 'main' 函数中的局部 int 变量会自动初始化?
- 在MSDOS编译器上,用大于最大值的值初始化int时输出混乱
- 使用 double 在 C++ 中初始化 int 之间的差异
- 如何在构造函数中初始化int const * const
- 使用memset初始化int数组
- 通过 fstream 函数初始化 int 向量??C++
- 在 c++ 中使用输入字符串的长度初始化 int 数组
- 为什么我不能用 const int 的地址初始化 int*
- 如何使用字符串(字符数组)初始化字符指针,而不是使用整数数组初始化 int 指针
- 如何初始化 int *const *const.
- C++ - 声明和初始化 int 时出现分段错误
- C - 使用类型为 'int 的表达式初始化'int *'的不兼容指针类型
- 错误无法初始化 'int *' 类型的参数,其 rvalue 类型为 'int'
- C++:正在初始化“int Agent::tun_alloc(char*,int)”的参数1[-fpermission]
- C++ 动态数组:不能使用 "void" 类型的值来初始化 "int" 类型的实体
- 无法使用类型 'int (*)[20]' 的右值初始化 'int *' 类型的参数
- 为什么我不能使用 '0x80000000' 来初始化 int 数组?
- 使用 memset 而不是 for 循环初始化 int** 时出现分段错误
- 如何初始化int的向量中的向量
- 初始化"int strcmpi(const char*, const char*)"错误的参数 1