如何在32位编译器中使用64位整数?

时间:2019-10-03 18:41:27

标签: c union c99

我目前正在编写要在Microchip PIC18 MCU上运行的程序。我使用xc8(v1.45-我必须使用此版本-)编译器并在MPLAB IDE中工作。在此版本的编译器中,没有64位整数支持。我需要使用64位整数进行一些计算。请参阅下面的我的方法来创建64位整数变量类型。但是每当我尝试将任何其他变量类型转换为这个新创建的类型时,都会出现此错误:

  

错误:从联合中不存在的类型转换为联合类型

能帮我解决这个问题吗?

我尝试使用“ long long int”变量,但是此版本的xc8不支持该变量。

#include <stdio.h>
#include <stdint.h>

typedef union
{
    int32_t bigInteger[2];
}myInt64;


int main(void) {

    myInt64 *myVariable;

    myInt64 *aaa;

    long abc = 0xFAC0ED12;

    aaa = (myInt64)abc;

    myVariable = 0xF0000000000000000F;
    printf("%jx", aaa);


    return EXIT_SUCCESS;
}

1 个答案:

答案 0 :(得分:1)

您不能仅通过构造包含64位的结构或联合来创建64位整数类型,而不管该结构或联合的内部成员是什么。 C没有规定将整数转换为这种类型或对其进行任何算术运算。

要在没有编译器直接支持的情况下实现64位整数,必须编写自己的例程来执行所需的任何操作,其中可能包括:

  • 给出两个32位整数(它们表示“ base 2 32 ”中的64位数字),将其转换为您的64位类型。
  • 从您的64位类型转换为两个32位整数。
  • 从字符串中的数字转换为您的64位类型(就像scanf对于内置类型一样)。
  • 从64位类型转换为数字(就像printf一样)。
  • 对您的64位类型的两个操作数进行加,减,乘和除运算。