Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C+中的整数溢出+;即使使用“unsigned long”` 我正试图用C++来计算一个数字,但我得到了一个错误的答案。我认为这可能与数据类型有关_C++ - Fatal编程技术网

C+中的整数溢出+;即使使用“unsigned long”` 我正试图用C++来计算一个数字,但我得到了一个错误的答案。我认为这可能与数据类型有关

C+中的整数溢出+;即使使用“unsigned long”` 我正试图用C++来计算一个数字,但我得到了一个错误的答案。我认为这可能与数据类型有关,c++,C++,在相乘之前很久,我就尝试将所有数字转换为无符号,但结果是一样的 #包括 使用名称空间std; int main() { 无符号整数宽度=8864; 无符号整数高度=5288; 无符号整数NImg=50; 无符号长TotalBytes; TotalBytes=(宽度*高度*NImg+2)*2; cout在您的平台上无符号长也是32位,就像无符号整数一样。它不够大,无法存储计算结果。您必须使用无符号长,或者如果您愿意,可以使用uint64\u t: #include <iostream>

在相乘之前很久,我就尝试将所有数字转换为无符号,但结果是一样的


#包括
使用名称空间std;
int main()
{
无符号整数宽度=8864;
无符号整数高度=5288;
无符号整数NImg=50;
无符号长TotalBytes;
TotalBytes=(宽度*高度*NImg+2)*2;

cout在您的平台上
无符号长
也是32位,就像
无符号整数
一样。它不够大,无法存储计算结果。您必须使用
无符号长
,或者如果您愿意,可以使用
uint64\u t

#include <iostream>
#include <cstdint>
using namespace std;

int main()
{
    uint64_t width = 8864;
    uint64_t height = 5288;
    uint64_t NImg = 50;
    uint64_t TotalBytes;

    TotalBytes = (width * height * NImg + 2 ) * 2;

    cout<<TotalBytes<<endl;

}
#包括
#包括
使用名称空间std;
int main()
{
uint64_t宽度=8864;
uint64_t高度=5288;
uint64_t NImg=50;
uint64_t总字节;
TotalBytes=(宽度*高度*NImg+2)*2;

不能尝试使用大整数。您可以创建一个类或使用某人的库来实现它。例如,

显然,
无符号长
在您的平台上是32位的。尝试
无符号长
,它应该能够适合您的结果。还可以使用
cstdint
中的固定宽度类型来明确说明它。工作时利用C++实现“问题”像这样,你要提到的是你使用的是什么OS和编译器,因为不同的实现对于不同的类型有不同的最大大小。标准中提到的唯一的问题通常是在给定类型中应该适合的最小大小。C++代码不保证C++代码支持VA。值大于
4294967295
,该值小于您试图计算的值。如果您想要更大的值,请使用
unsigned long
。请记住
unsigned long
也不是无限的-可表示的最大值大于
unsigned long
所表示的值,但不是无限的仍然有限。赞成提及
uint64\u t
。如果需要特定的位宽度,则应使用这些类型别名。它实际上应该是
uint\u至少是t64\u t
(或者,
uint\u fast64\u t
),它将始终足够大以容纳结果。毕竟,这里的目标不是要有一个特定的大小,而是要有一个足够大的大小。此外,
uint64\u t
需要存在于所有一致的平台上,但
uint64\u t
不是。当然,
uint64\u t
不存在的情况将被退出e罕见,但在这里避免(罕见)问题并没有坏处。Overkill.64位int就足够了。