2009-07-25 23 views

回答

0

如果F#會將它轉換爲你,那麼-1UL將起作用。如果不是那麼你可以指定它爲0xFFFFFFFFFFFFFFFFUL並添加一個註釋來記住它是-1。

目前還沒有安裝F#工具,所以我無法驗證這一點。

5

讓我留下一個事實,即你不能用一個只能存儲正值(當然是零)的數據類型來表示一個負值。

另一方面,如果您將其存儲在有符號值中,則-1會作爲所有位設置存儲。

所以基本上,我會假設你想要找到一種方法來表示-1作爲一個符合值的符合-1的位方式值。

然後,值將在C#和C/C++語法中爲0xffffffffffffffff。到底如何在F#中指定我不知道。

3

我根本不知道F#,但是如果它與其他語言一樣,UInt64 不能爲。永遠。 UInt表示無符號整數,這意味着它只能表示正值。

+0

像C這樣的語言將允許將-1放置在uint64_t中。由於2的補碼可以被認爲是一個正數。 – 2009-07-25 20:27:48

+0

那麼,您可以將代表-1的位模式存儲爲無符號整數變量的有符號整數。但是,使用該值會將其解釋爲正數,超出signed int的上限。 – 2009-08-03 16:52:26

0

如果你想要去的一個符號int:

-1: int64 

,但你不能爲負數匹配爲uint,正如其他人說。

1

那麼你可以指定它-1,並在大多數架構中存儲2的補碼。簽名和未簽名的內容實際上只用於類型檢查。硬件沒有負面信號。

我不知道f#類型檢查器是否足夠聰明,知道詞法常量-1是負數,不應放在uint64中。

C肯定不在乎。當一個類型與ü這意味着無符號開始 :

#include <stdio.h> 
#include <inttypes.h> 
main() 
{ 
uint64_t x = -1; 
printf("0x%x\n", x); // 0xffffffff 
} 
3

爲了擴大對其他的答案。什麼有符號/無符號的意思是這樣的:

數字存儲使用一定數量的位。在int64和uint64的情況下,使用64位。如果數字有符號,第一位不作爲數字本身的一部分,只有其他63位。該位用於說明該數字是否爲負值。如果數字是無符號的,則包含第一位的所有位都用作數字的一部分,並且數字始終爲非負數(即:爲正數或0)。

6
> match 0UL-1UL with 
- |System.UInt64.MaxValue -> "-1" 
- |_ -> "???" 
- ;; 
val it : string = "-1"