回答
這取決於你想要的行爲是什麼。 int
不能容納unsigned int
能夠的許多值。
你可以施放和往常一樣:
int signedInt = (int) myUnsigned;
,但這樣會造成問題,如果unsigned
值是過去最大int
可以容納。這意味着一半的可能的unsigned
值將導致錯誤的行爲,除非您特別小心。
如果您不得不毫無理由地進行轉換,那麼您應該重新審視如何將值存儲在第一位。
編輯:正如ProdigySim在評論中提到的,最大值取決於平臺。但您可以通過INT_MAX
和UINT_MAX
訪問它。
對於通常的4個字節的類型:
4 bytes = (4*8) bits = 32 bits
如果所有32位被使用,如在unsigned
,最大值爲2^32 - 1,或4,294,967,295
。
一個簽名的int
有效地犧牲了1位的符號,所以最大值將是2^31-1或2,147,483,647
。請注意,這是其他值的一半。
你知道未簽名的最大值是多少?併爲int? – 2011-02-26 20:30:52
@Eric Brotto:這將取決於您正在編譯的系統。如果你需要檢查,通常有宏可用於INT_MAX,UINT_MAX。在大多數32位系統上,INT_MAX將是(2^31)-1,UINT_MAX是(2^32)-1。請注意,將UINT_MAX轉換爲int將爲-1。 – ProdigySim 2011-02-26 20:34:32
「通常」是指C標準要求它們(對於託管系統)。 – 2011-02-27 03:38:22
如果您有變量unsigned int x;
,則可以使用(int)x
將其轉換爲int
。
它是如此簡單:
unsigned int foo;
int bar = 10;
foo = (unsigned int)bar;
,反之亦然......
演員陣容冗贅醜陋。賦值固有地包括在C中對於賦值有意義的類型(甚至對於某些不適用的類型)的轉換。演員通常只是爲了掩蓋不正確的代碼。 – 2011-02-26 22:20:04
這不是真的,如果你正在檢查是否已經過了一段時間,這實際上是一個相當常見的問題。 你的間隔應該是一個無符號整數,因爲它沒有意義的被簽名,但time_t總是被簽名的,所以它可以代表比1970年早的日期。如果你在做if((now - 然後)>間隔)編譯器將生成警告。 – 2014-05-26 12:59:39
unsigned int類型可以被轉換爲符號的(或反之亦然),如下所示通過簡單的表達式:
unsigned int z;
int y=5;
z= (unsigned int)y;
儘管未靶向的問題,你想讀下面的鏈接:
我想你的意思是說「z =(unsigned int)y;」在上面的表達式中。由於y已經是一個整數,將它轉換爲int是毫無意義的... – 2011-06-01 15:50:34
是......... :) – 2011-06-01 16:00:59
如果一個unsigned int和(signed)int的以相同的表達中使用的,符號int被隱式轉換爲無符號的。這是C語言的一個相當危險的特徵,因此您需要注意這一點。它可能是也可能不是你的錯誤的原因。如果你想得到更詳細的答案,你必須發佈一些代碼。
- 1. C/C++:如何正確地將「unsigned int *」值轉換爲「unsigned int」?
- 2. 如何將c中的unsigned char *轉換爲unsigned int *?
- 3. 將unsigned short *轉換爲int *
- 4. 將BIGINT UNSIGNED轉換爲INT
- 5. 如何將unsigned int轉換爲uint64
- 6. 如何在C++中將unsigned int 64轉換爲時間?
- 7. C++ unsigned int雙重轉換
- 8. 如何將const unsigned int數組轉換爲int數組
- 9. 在'C'中將int轉換爲int []
- 10. 從'uint64_t'轉換爲'unsigned int'
- 11. 將int轉換爲unsigned short java
- 12. JNI:將unsigned int轉換爲jint
- 13. 將Const char *轉換爲Unsigned long int - strtoul
- 14. C/C++:將char []轉換爲int失敗,將unsigned char []轉換爲int,原因何在?
- 15. 如何將ANSI-C從unsigned int *轉換爲char *?
- 16. 如何將python long轉換爲c unsigned int?
- 17. QStandardItem在編輯後將unsigned int轉換爲int
- 18. 如何轉換int到int?,在C#中?
- 19. 如何在C++中將int [] []轉換爲int **
- 20. 如何在C++/CLI中將'int *'轉換爲'int ^'?
- 21. 將unsigned int轉換爲int指針seg-fault
- 22. 它是否有可能會將int *轉換爲unsigned int *
- 23. 如何將int類型的unsigned char字符串轉換爲python中的int
- 24. 在C/C++中將int轉換爲bool
- 25. 如何將int數組轉換爲int?
- 26. 如何將int []類型轉換爲int?[]
- 27. 在Haskell中將Maybe Int轉換爲Int
- 28. 調用'(std :: pair <unsigned int,unsigned int>)(unsigned int&,unsigned int)'
- 29. 將[Int?]轉換爲[Int]
- 30. 將int轉換爲int []
真正的問題是你想要做什麼當/如果unsigned int中的值超出了可以由signed int表示的範圍。如果它在範圍內,只需分配它即可完成。如果超出範圍,則會給出未指定的結果,因此您可能需要先將其縮小到正確的範圍,或將其分配給更大的帶符號類型。 – 2011-02-26 20:23:33
未指定,實現定義(C996.3.1.3§3)。否則,我同意,並分配給一個更大的帶符號整數是最簡單的解決方案。 – Gauthier 2014-02-18 10:39:56