Артём Малютин Asked:2020-07-16 01:30:41 +0800 CST2020-07-16 01:30:41 +0800 CST 2020-07-16 01:30:41 +0800 CST 键入类型应占用多少 RAM 772 作为以下代码片段的结果,类型类型必须占用多少 RAM 才能使变量 c 存储 -32767? type a = 32767; type b = 1; type c = 1; c = a + b; 这样的任务是如何解决的? c++ 1 个回答 Voted Best Answer AnT stands with Russia 2020-07-16T01:35:54+08:002020-07-16T01:35:54+08:00 该任务没有具体的解决方案。 -32767当二元运算符应用于存储和值+的对象时,C++ 语言中没有基本或标准库类型会产生结果。327671 如果我们谈论的是一些非标准类型,那么答案几乎可以是任何东西。 在 C++ 中,有符号溢出会导致未定义的行为。也就是两个正整数值相加不能给出负值,除了一个小漏洞:如果“溢出”不是发生在求和过程中,而是在类型转换过程中(从更宽的有符号整数到更窄的整数),那么行为不是未定义的, a 是实现定义的。 因此,在某些实现中,如果type是某个有符号类型,比 窄int,其范围不包括 value 32768,但32768包含在 type 的范围内int,则表达式中的操作数a + b将受到 typeint的整数提升,表达式将被评估到类型内int(没有溢出),然后转换回type. 反向转换将“溢出”实现定义的结果。从理论上讲,在某些实现中,它可以变成-32767,在某些 - 12345,在某些 - 其他东西...... 但这一切都远远超出了一个类型应该占用多少内存的问题type。
该任务没有具体的解决方案。
-32767
当二元运算符应用于存储和值+
的对象时,C++ 语言中没有基本或标准库类型会产生结果。32767
1
如果我们谈论的是一些非标准类型,那么答案几乎可以是任何东西。
在 C++ 中,有符号溢出会导致未定义的行为。也就是两个正整数值相加不能给出负值,除了一个小漏洞:如果“溢出”不是发生在求和过程中,而是在类型转换过程中(从更宽的有符号整数到更窄的整数),那么行为不是未定义的, a 是实现定义的。
因此,在某些实现中,如果
type
是某个有符号类型,比 窄int
,其范围不包括 value32768
,但32768
包含在 type 的范围内int
,则表达式中的操作数a + b
将受到 typeint
的整数提升,表达式将被评估到类型内int
(没有溢出),然后转换回type
. 反向转换将“溢出”实现定义的结果。从理论上讲,在某些实现中,它可以变成-32767
,在某些 -12345
,在某些 - 其他东西......但这一切都远远超出了一个类型应该占用多少内存的问题
type
。