为什么C++;程序返回代码而不是答案时';太大了? 我正在编写一个C++程序来计算一道数学题。我首先写道: int x = 1 int y = 1 int z = 1 int answer = x * y * z cout << answer << endl; intx=1 int y=1 int z=1 int-answer=x*y*z cout

为什么C++;程序返回代码而不是答案时';太大了? 我正在编写一个C++程序来计算一道数学题。我首先写道: int x = 1 int y = 1 int z = 1 int answer = x * y * z cout << answer << endl; intx=1 int y=1 int z=1 int-answer=x*y*z cout,c++,C++,它不是一个代码,而是存储在整数结果中的值。您遇到整数溢出。int只能保存特定大小的值,当您超过该大小时,您最终得到的位模式不是您想要的,但仍然可以存储在int中。有时,这些位模式是负数的整数表示,这就是这里发生的情况 您可以考虑使用更大的整数类型,如长或长LU/ .< /P> < P>这不是一个代码,而是存储在整数结果中的值。您遇到整数溢出。int只能保存特定大小的值,当您超过该大小时,您最终得到的位模式不是您想要的,但仍然可以存储在int中。有时,这些位模式是负数的整数表示,这就是这里发生的情

它不是一个代码,而是存储在整数结果中的值。您遇到整数溢出。
int
只能保存特定大小的值,当您超过该大小时,您最终得到的位模式不是您想要的,但仍然可以存储在
int
中。有时,这些位模式是负数的整数表示,这就是这里发生的情况


您可以考虑使用更大的整数类型,如<代码>长或长LU/<代码> .< /P> < P>这不是一个代码,而是存储在整数结果中的值。您遇到整数溢出。

int
只能保存特定大小的值,当您超过该大小时,您最终得到的位模式不是您想要的,但仍然可以存储在
int
中。有时,这些位模式是负数的整数表示,这就是这里发生的情况



你可以考虑使用一个更大的整数类型,如<代码>长或长Lo/<代码>。

通常是代码> int <代码>只能容纳大约2.2亿字节。在这种情况下,您得到7388582404,太大了。但如果你把它看作一个十六进制数,你会得到1 B8 64 D204。通常情况下,B8 64 D2 04位于32位整数中,1消失在以太中。转换回十进制表示法,得到-1201352188。这是有符号整数通常会发生的情况,但实际发生的情况取决于C++下面的任何内容,但是结果是一样的,答案涵盖了所有的位。1234*5243*1142的
结果超过了
int
在您的平台上可以表示的最大值(该标准仅保证
int
最多可表示
32767
,尽管您的编译器似乎有一个32位
int
,最多可表示约
2147483647
),因此会出现溢出。正式来说,有符号整数类型的溢出是未定义的行为(尽管这可能会在未来的标准中发生变化)。一个典型的结果(标准没有保证)是一个与您预期的值非常不同的值(在您的情况下,是一个很大的负值)也可以考虑这个链接:如果你想为你的数字设置最大的大小。通常,代码> int /代码>只能保存大约2.2亿字节。在你传递这些东西之后……在这种情况下,你得到7388582404,太大了。但是如果你把它看成十六进制数哟。你得到1 B8 64 D2 04。通常的行为是B8 64 D2 04位于32位整数中,1消失在以太中。转换回十进制表示法,你得到-1201352188。这是有符号整数通常发生的情况,但由C++下的任何内容来决定实际发生的情况。副本上的一个注释:较小的类型是bei使用了ng,但结果是相同的,答案覆盖了所有位。
1234*5243*1142
的结果超过了
int
在您的平台上可以表示的最大值(该标准仅保证
int
最多可表示
32767
,尽管您的编译器似乎有一个32位
int
,最多可表示约
2147483647
),因此会出现溢出。正式来说,有符号整数类型的溢出是未定义的行为(尽管这可能会在未来的标准中发生变化)。一个典型的结果(标准没有保证)是一个与您预期的值非常不同的值(在您的情况下,是一个很大的负值)也可以考虑这个链接:如果你想为你的数字设置最大的大小。注意你要整个数据类型更大。如果你乘以3 <代码> int <代码> s,乘法将被作为<代码> int <代码>,并且在它可以被存储在更大的类型。@user4581301这实际上不是真的。当您执行
long*int
int*long
时,
int
实际上会被转换成
long
并使其成为
long*long
。但是,确实您可能希望手动转换它们,甚至将它们声明为相同的类型,以消除错误y意外行为另一种可能是使用一些库,如@Ranoiaetep,你说的是真的,但这并不意味着我的陈述不真实。乘以三个
int
s,你将得到一个
int
。这是规则。将其中一个或多个
int
更改为
long
,你将得到你所描述的行为cribed,但您已经从根本上更改了参数。@user4581301对不起,这是我的错,我以为您的意思是
int(3)*long(num)
出于某些原因,请注意,您会一直使用较大的数据类型。如果您将3
int
s相乘,则乘法将作为
int
进行,并将溢出,然后才能将其存储在较大的类型中。@user4581301这实际上不是真的。当您执行
long*int
int*long
int
实际上将被转换成
long
并将其转换成
long*long
。然而,确实您可能希望手动转换它们,甚至将它们声明为相同的类型,以消除任何意外行为。另一种可能是使用一些库,例如@Ranoiaetep,您所说的是真的,但事实并非如此使我的陈述不真实。将三个
int
s相乘,你将得到一个
int
。这是规则。将一个或多个
int
s更改为
   int x = 1234;
    int y = 5243;
    int z = 1142;
    int answer =  x * y * z;
    cout << answer << endl ;