c++ - 如何扩展我的类以接受 C++ 中的 64 位数字?

标签 c++

我实现了一个类并重载了基本算术运算(+、-、*、/)。我在 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/

相关文章:

c++ - 在没有默认构造函数的情况下将对象实例化为类成员

c++ - 返回的对象如何分配?

c++ - 我想使用 I2C 从 arduino 接收多个数据到 raspberry pi

c++ - 根据标准委员会的说法,为什么匿名命名空间不足以替代命名空间静态?

c++ - 使用 for_each 将列表初始化为随机变量

c++ - 如何定义嵌套模板的静态成员(模板类内部的模板类)

c++ - MinGW中没有strsafe.h?改用什么?

java - 为什么不能过度使用虚函数?

c++ - GetPrivateProfileString 返回 "The system cannot find the file specified.",即使该文件存在

c++ - 将 QProgressBar 设置为从逻辑层更新的正确方法是什么?