2012-11-09 169 views
0

我收到編譯錯誤的項目代碼,其中的情況如下:如何轉換爲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" 

我也曾嘗試類型轉換:

var2 = (U64bit) 100*var1; 

這也給出了同樣的錯誤。

+2

什麼是'var1'你只聲明'var',不是? –

+0

U32bit =無符號32位整數 –

+0

U64bit =無符號64位整數 –

回答

0

您確定這種類型的「U64bit」實際上被定義爲一個整數嗎?如果不是,那可能是問題,它可能是一個標量類型的struct

您也沒有指定您正在使用的編譯器或操作系統。如果它符合C標準,則應該使用#include <stdint.h>並使用uint32_tuint64_t而不是U32bitU64bit

+0

你是不是故意說類和結構是非標量類型?另外,C中沒有類。 – mizo

0

嘗試以下操作:

var2 = (U64bit)var1 * 100; 

編輯

也許

var2 = (U64bit)var1 * 100LL; 

反正U32Bit報關,U64Bi噸和function將是有益的。

+0

已經嘗試過。它不起作用 –

+0

整數升級在C標準中定義明確,C編譯器不需要顯式LL。 – Lundin

+0

@Lundin - 有時更明確是有用的。編譯器並不總是遵守標準。 –

2

什麼是U64bit?這是一個非標準類型,所以你必須顯示它的聲明。

聽起來好像是struct

2

C中的標準固定寬度整數類型是uint32_tuint64_t,請嘗試使用它們。然後可以用UINT64_C(100)來定義該類型的常量。

出現這些類型,您可能需要

#include <stdint.h> 

添加到您的包含。

相關問題