C++ 我不明白为什么这个解决方案有效。(整数溢出)

C++ 我不明白为什么这个解决方案有效。(整数溢出),c++,integer-overflow,C++,Integer Overflow,很抱歉标题不好,但我不知道怎么命名。 我要解决一些问题来练习,我遇到了这个问题。挑战是为一个盒子写一个类。所以它有经度、高度和宽度。其中一种方法应该返回盒子的体积。这就像是它的简历: 包括 类框{ 私人: int l,b,h; 公众: Boxint L、int B、int H{ l=l;b=b;h=h; } 整数计算器{ 返回b*l*h; } }; int main{ int l,b,h; 非常感谢你的帮助 直到如果变量是int,则运算结果被分配给long long int并不重要,运算将使用

很抱歉标题不好,但我不知道怎么命名。 我要解决一些问题来练习,我遇到了这个问题。挑战是为一个盒子写一个类。所以它有经度、高度和宽度。其中一种方法应该返回盒子的体积。这就像是它的简历:

包括 类框{ 私人: int l,b,h; 公众: Boxint L、int B、int H{ l=l;b=b;h=h; } 整数计算器{ 返回b*l*h; } }; int main{ int l,b,h;
非常感谢你的帮助

直到如果变量是int,则运算结果被分配给long long int并不重要,运算将使用int math完成

所以我使用的特别解决方案是因为b*h仍然是一个没有问题的整数,当我将它乘以l时,它总是将它们作为长整数进行运算。这将是最终的解决方案:

#include<bits/stdc++.h>

class Box {
private:
    long long int l,b,h;
public:
    Box(int L, int B, int H){
        l=L;b=B;h=H;
    }
    long long int CalculateVolume() {
        return b*l*h;
    } 
};

int main() {
    int l,b,h;
    std::cin >> l >> b >> h;
    Box box(l, b, h);
    std::cout << box.CalculateVolume() << std::endl;
}

再次感谢您的帮助。

非常感谢您的帮助

直到如果变量是int,则运算结果被分配给long long int并不重要,运算将使用int math完成

所以我使用的特别解决方案是因为b*h仍然是一个没有问题的整数,当我将它乘以l时,它总是将它们作为长整数进行运算。这将是最终的解决方案:

#include<bits/stdc++.h>

class Box {
private:
    long long int l,b,h;
public:
    Box(int L, int B, int H){
        l=L;b=B;h=H;
    }
    long long int CalculateVolume() {
        return b*l*h;
    } 
};

int main() {
    int l,b,h;
    std::cin >> l >> b >> h;
    Box box(l, b, h);
    std::cout << box.CalculateVolume() << std::endl;
}

再次感谢您的帮助。

增加结果变量的大小无关紧要。如果l、b、h;的类型没有更改-为int-则执行int数学运算,仅将结果转换为更大的类型。注意:有符号整数溢出是未定义的行为。提示:尝试养成在中使用的习惯而不是赋值。结果值的类型仅取决于操作数。如果将两个整数相乘,即使将结果赋给更大的类型,也会得到一个整数。b*h*l是使用整数计算的,因为b、h和l都是整数。建议读取:。没关系,您增加了结果变量的大小。如果l、b、h;的类型未更改-为int-执行了int数学运算,只将结果转换为更大的类型。注意:有符号整数溢出是未定义的行为。提示:尝试并养成使用而不是赋值的习惯。结果值的类型仅取决于操作数。如果将两个int相乘,则会得到一个更大的值int,即使将结果分配给更大的类型也是如此。b*h*l是使用int计算的,因为b、h和l都是int。建议阅读:。首选返回1all*b*l*h;,并将单个项保留为unsigned int。另外,请注意,unsigned long long并不总是大的enough首选返回1all*b*l*h;,并将单个项保留为unsigned int还要注意,unsigned long long并不总是足够大
Input: 1039 3749 8473
Output: 
18446744072353936051
18446744072353936051
Input: 1039 3749 8473
Output: 33004122803
#include<bits/stdc++.h>

class Box {
private:
    long long int l,b,h;
public:
    Box(int L, int B, int H){
        l=L;b=B;h=H;
    }
    long long int CalculateVolume() {
        return b*l*h;
    } 
};

int main() {
    int l,b,h;
    std::cin >> l >> b >> h;
    Box box(l, b, h);
    std::cout << box.CalculateVolume() << std::endl;
}