如何在32中将32位整数转换为64位值

时间:2012-11-09 14:49:34

标签: c bit-manipulation

我在项目代码中遇到编译错误,情况如下:

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"

我也尝试过类型转换:

var2 = (U64bit) 100*var1;

这也会产生同样的错误。

4 个答案:

答案 0 :(得分:2)

什么是U64bit?这是一种非标准类型,因此您必须显示其声明。

听起来好像是struct

答案 1 :(得分:2)

C中的标准固定宽度整数类型为uint32_tuint64_t,请尝试使用这些。然后可以使用UINT64_C(100)定义该类型的常量。

要拥有这些类型,您可能需要添加

#include <stdint.h>

到您的包含。

答案 2 :(得分:0)

你确定这种类型的“U64bit”实际上是一个整数吗?如果不是,那可能是问题,它可能是struct,它是标量类型。

您也没有指定您使用的编译器或操作系统。如果它符合C标准,那么您应该#include <stdint.h>并使用uint32_tuint64_t而不是U32bitU64bit

答案 3 :(得分:0)

尝试以下方法:

var2 = (U64bit)var1 * 100;

修改

也许

var2 = (U64bit)var1 * 100LL;

无论如何,U32BitU64Bi t和function的声明都会有用。