Как использовать 64-битные целые числа в 32-битном компиляторе? - PullRequest
0 голосов
/ 03 октября 2019

В настоящее время я пишу программу для работы на микрочипе PIC18 Microchip. Я использую xc8 (v1.45 -Я должен использовать эту версию-) и работает в MPLAB IDE. В этой версии компилятора не поддерживается 64-битное целое число. Мне нужно использовать 64-битные целые числа для некоторых вычислений. Пожалуйста, смотрите мой метод ниже, чтобы создать 64-битную целочисленную переменную типа. Но всякий раз, когда я пытаюсь преобразовать любой другой тип переменной в этот вновь созданный тип, я получаю эту ошибку:

ошибка: приведение к типу объединения из типа, отсутствующего в union

Не могли бы вы помочь мне решить эту проблему?

Я пытался использовать переменную "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 Ответ

1 голос
/ 03 октября 2019

Вы не можете создать 64-битный целочисленный тип, просто создав структуру или объединение, которое содержит 64 бита, независимо от того, каковы внутренние члены этой структуры или объединения. В C нет условий для преобразования целых чисел в такой тип или для выполнения каких-либо арифметических действий над ними.

Чтобы реализовать 64-битные целые числа без прямой поддержки со стороны компилятора, вы должны написать свои собственные подпрограммы для выполнения любых необходимых вам операций. , в том числе:

  • Учитывая два 32-разрядных целых числа, которые представляют 64-разрядное число в «base 2 32 », преобразуйте их в свой 64-разрядный тип.
  • Преобразование из вашего 64-разрядного типа в два 32-разрядных целых числа.
  • Преобразование из числа в строке в ваш 64-разрядный тип (как scanf для встроенных типов).
  • Преобразование из вашего 64-битного типа в число (как делает printf).
  • Сложение, вычитание, умножение и деление двух операндов вашего 64-битного типа.
...