2010-09-29 79 views
0

其實我(可能)是一個「簡單」的問題。所以我不知道如何將有符號整數轉換爲無符號整數。C:轉換籤名爲無符號

我的代碼:

signed int entry = 0; 
printf("Decimal Number : "); 
scanf("%d", &entry); 
unsigned int uEntry= (unsigned int) entry; 
printf("Unsigned : %d\n", uEntry); 

如果我無符號值發送到控制檯(見我最後的代碼行),我總是得到回一個有符號整數。

你能幫我嗎?

非常感謝!

親切的問候,親

回答

9
printf("Unsigned : %u\n", uEntry); 
//     ^^ 

必須使用%u符告訴printf運行時,該uEntryunsigned int。如果使用%d,則printf函數將會預計爲int,因此會將您的輸入重新解釋爲已簽名的值。

+0

嗨肯尼,謝謝你的回答。如果我設置了%u說明符,我將得到-13一個無符號值4294967283.問題是什麼。謝謝。 – bitsmuggler 2010-09-29 20:08:45

+0

沒有問題。這是變量位的無符號表示。 – 2010-09-29 20:33:19

+2

@pro:當您的格式說明符與要打印的值的類型不匹配時,行爲未定義,結果無意義。即當用'%u'打印'-13'時,結果是沒有意義的。以及您最初嘗試使用'%d'打印無符號值。如果您希望輸出有意義,請始終使用正確的格式說明符:'unsigned int'爲'%u','signed int'爲'%d'。 – AnT 2010-09-30 00:34:29

1

在代碼的末尾追加這兩行,您就會明白髮生了什麼。

printf("entry: signed = %d, unsigned = %u, hex = 0x%x\n", entry, entry entry); 
printf("uEntry: signed = %d, unsigned = %u, hex = 0x%x\n", uEntry,uEntry,uEntry); 
+1

雖然它可能會解釋您的特定實現如何工作,但這兩個調用都會導致未定義的行爲。您必須根據您在格式字符串中指定的內容爲'printf'提供正確的類型,以便定義好結果。 – 2010-09-30 01:52:16