2013-03-17 176 views
1

將-1轉換爲uint將不起作用「((uint)( - 1))」解決方案?將-1轉換爲uint C#

num10 = ((uint)(-1)) >> (0x20 - num9); 

錯誤: 恆值「-1」不能被轉換爲「UINT」(利用未選中語法重寫)

+2

-1是無符號整數的範圍之外。 – 2013-03-17 06:03:49

+1

錯誤消息是否不告訴您解決方案? – 2013-03-17 06:06:51

回答

1

的無符號整數只能表示正值。它不能代表-1。

如果要表示負值,則需要使用signed類型,如int

2

編譯器告訴你,你需要做什麼:

unchecked 
{ 
    num10 = ((uint)(-1)) >> (0x20 - num9); 
} 

但是,它可能不會給你你想要的結果。

4

使用

uint minus1 = unchecked((uint)-1); 
uint num10 = (minus1) >> (0x20 - num9); 

甚至更​​好

uint num10 = (uint.MaxValue) >> (0x20u - num9); 
0

你確實可以有些東西類似於負數,無符號數。它們具有如下特徵:x + (-x) == 0

要建立在C#中沒有選中區域「負」 UINT,您可以改用等效(~x) + 1這是一樣的-x