我实现了一个类并重载了基本算术运算(+、-、*、/)。我在 32 位机器上工作,所以我的 int 是 32 位(4 字节)。我现在想扩展此类以接受大于 32 位的数字,但我很困惑该怎么做? 我的头文件如下所示:
using namespace std;
#ifndef _bignumbers_H
#define _bignumbers_H
class bignumbers
{
public:
bignumbers(int _nr){ nr = _nr; }
//overloaded operators
friend bignumbers operator+(const bignumbers& _nr1, const bignumbers& _nr2);
friend bignumbers operator-(const bignumbers& _nr1, const bignumbers& _nr2);
friend bignumbers operator*(const bignumbers& _nr1, const bignumbers& _nr2);
friend bignumbers operator/(const bignumbers& _nr1, const bignumbers& _nr2);
int getNumber() { return nr; };
private:
int nr;
protected:
};
bignumbers operator+(const bignumbers& nr_1, const bignumbers& nr_2){
return bignumbers(nr_1.nr + nr_2.nr);
}
bignumbers operator-(const bignumbers& nr_1, const bignumbers& nr_2){
return bignumbers(nr_1.nr - nr_2.nr);
}
bignumbers operator*(const bignumbers& nr_1, const bignumbers& nr_2){
return bignumbers(nr_1.nr * nr_2.nr);
}
bignumbers operator/(const bignumbers& nr_1, const bignumbers& nr_2){
return bignumbers(nr_1.nr / nr_2.nr);
}
#endif
然后在main.cpp中我写道:
int main ()
{
// HERE I WANT TO SPECIFY TYPE BIGNUMBER, AND THEN I CAN TYPE
// NUMBERS WHICH ARE 64 BITS and not 32(int) like here
// HOW CAN I DO THAT ??????
int var1 = 0;
cout<< "Put in first int number: ";
cin >> var1;
int var2 = 0;
cout<< "Put in second int number: ";
cin >> var2;
bignumbers NR_1(var1), NR_2(var2);
bignumbers SUM = NR_1 + NR_2;
bignumbers DIFFERENCE = NR_1 - NR_2;
bignumbers PRODUCT = NR_1 * NR_2;
bignumbers DIVISION = NR_1 / NR_2;
cout << NR_1.getNumber() << " + " << NR_2.getNumber() << " = " << SUM.getNumber() << endl;
cout << NR_1.getNumber() << " - " << NR_2.getNumber() << " = " << DIFFERENCE.getNumber() << endl;
cout << NR_1.getNumber() << " * " << NR_2.getNumber() << " = " << PRODUCT.getNumber() << endl;
cout << NR_1.getNumber() << " / " << NR_2.getNumber() << " = " << DIVISION.getNumber() << endl;
return 0;
}
最佳答案
正如 Paramagnetic Croissant 所说,使用 int64_t
(或 __int64
,如果您的编译器没有 int64_t
)。即使您使用的是 32 位操作系统,它也能正常工作。
如果你想自己实现它,你不能只将数字存储为一个 32 位数字。您在那里所做的实际上是创建一个新类来实现标准的 32 位整数。
您需要使用 2 个单独的 32 位整数跟踪每个数字,并实现所有运算符以正确使用构成 1 个 64 位整数的两个 32 位整数来生成 2 个 32 位整数的输出集表示 1 个 64 位整数的整数。然后,当您考虑签名与未签名时,它会变得更加毛茸茸。
简而言之,使用提供的 64 位 int,如 int64_t
。
如果这是家庭作业或其他事情,我会查看 Microsoft 的 LARGE_INTEGER
以了解要使用的接口(interface)以及在内部表示 64 位整数的方法。
关于c++ - 如何扩展我的类以接受 C++ 中的 64 位数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28949831/