2013-01-20 136 views
0

我想將unsigned int轉換爲C函數內的uint64。 uint64在R包int64中定義。如何將unsigned int轉換爲uint64

EDIT

這個問題是關於選自C unsigned int的數據類型轉換到UINT64 R輸入語言數據類型。

「int64包已被開發,因此64位整數向量僅使用R數據結構表示,即數據不表示爲某些C++對象的外部指針,而是每個64位整數表示爲一對常規32位整數,它們每個都攜帶底層64位整數的一半位,這是設計中的一個選擇,因此64位整數向量可以被串行化並用作數據幀列。

+4

只需使用像你一樣的演員就可以了。你必須有一個64位無符號整型的適當的typedef,例如'stdint.h' –

+3

Euh,'uint64 n =(uint64)k;',也許? – 2013-01-20 20:23:04

+2

@PreetSangha爲什麼呢?將東西轉換爲int64是OP正在尋找的東西,而不是? – 2013-01-20 20:34:45

回答

0

要求無符號整數能夠存儲介於0-65536之間的值。 int64_t(便攜式版本,從<stdint.h>)將能夠存儲 - (2 -1)和2 之間的值。這裏存在一個問題,那就是無符號整型可能是64位長,並且可能代表int64_t範圍之外的值(參見C標準的第5.2.4.2.1節p1以及下面的部分)。

下面是標準的說:

6.3.1.3符號和無符號整數

  1. 當與整型值轉化爲除_Bool以外的其他整數類型,如果該值可以是由新型代表,它沒有改變。否則,如果新類型是無符號的,則通過反覆地增加或減去一個多於新類型中可表示的最大值的值來轉換該值,直到該值處於新類型的範圍內。 60)
  2. 否則,新類型被簽名並且其值不能被表示;結果是實現定義的或實現定義的信號被引發。

60)規則描述數學值的算術,而不是給定類型的表達式的值。


忽略與計算異常相對應的實現定義信號是未定義的行爲。

對於無符號到符號轉換的情況,我建議明確定義您的行爲。飽和度最簡單:當您的unsigned int值大於INT64_MAX時,轉換結果將爲INT64_MAX。這看起來像x > INT64_MAX : INT64_MAX ? x。包裝LIA樣式(例如,unsigned int x = UINT_MAX; ++x == 0)對於int64_t是可能的,因爲保證int64_t不包含填充,但需要做更多的工作來保證可移植性。我建議像(x & INT64_MIN) > INT64_MAX ? -(x & INT64_MAX) : x & INT64_MAX這樣的東西,如果你可以找到一些斷言你的int64將具有與C標準int64_t相同的表示。

相關問題