Как конвертировать 32-битное целое в 64-битное значение в C

Я получаю ошибку компиляции в коде проекта, где ситуация выглядит следующим образом:

typedef unsigned int U32bit;
typedef unsigned long long U64bit;

U32bit      var;
U64bit      var2;

var = function();  /* Function returns a 32-bit value, which is stored in var */

var2 = 100*var1;   /* 100*var1 is very Big & can be stored only in U64bit variable */

For the Above Line: var2 = 100*var1

Я получаю следующую ошибку компиляции в Solaris:

"conversion to non-scalar type requested"

Я также попробовал Typecasting:

var2 = (U64bit) 100*var1;

Это также дает ту же ошибку.

4 ответа

Стандартные целочисленные типы фиксированной ширины в C: uint32_t а также uint64_tпопробуйте с этим. Тогда константа этого типа может быть определена с UINT64_C(100),

Чтобы эти типы вы могли добавить

#include <stdint.h>

к вашим услугам.

Что такое U64bit? Это нестандартный тип, поэтому вы должны показать его объявление.

Звучит так, как будто это struct,

Попробуйте следующее:

var2 = (U64bit)var1 * 100;

РЕДАКТИРОВАТЬ

возможно

var2 = (U64bit)var1 * 100LL;

В любом случае декларация для U32Bit, U64Biт и дляfunction было бы полезно.

Вы уверены, что этот тип "U64bit" на самом деле определяется как целое число? Если нет, то это может быть проблемой, что это может быть struct который является скалярным типом.

Вы также не указываете, какой компилятор или ОС вы используете. Если что-то соответствует стандарту C, вы должны #include <stdint.h> и использовать uint32_t а также uint64_t вместо вашего U32bit а также U64bit,

Другие вопросы по тегам