我會通過現有的代碼和調試該聲明的UTC時間爲當將一個unsigned int變量變爲負
unsigned int utc_time;
我可以每次都獲得了一些積極的整數由我會確定我得到時間。但突然在代碼中,我得到了一個聲明爲無符號整數的變量的負值。
請幫我理解可能是什麼原因。
我會通過現有的代碼和調試該聲明的UTC時間爲當將一個unsigned int變量變爲負
unsigned int utc_time;
我可以每次都獲得了一些積極的整數由我會確定我得到時間。但突然在代碼中,我得到了一個聲明爲無符號整數的變量的負值。
請幫我理解可能是什麼原因。
無符號整數,就其性質而言,可以從不爲負數。
您可以用負值結束了,如果你將它轉換爲有符號整數,或者乾脆值分配給一個有符號整數,甚至錯誤地把它當作簽署,如用:
#include <stdio.h>
int main (void) {
unsigned int u = 3333333333u;
printf ("unsigned = %u, signed = %d\n", u, u);
return 0;
}
輸出:
unsigned = 3333333333, signed = -961633963
在我的32位整數系統上。
或者如果您將它視爲已簽名,例如通過使用帶有「%d」格式的'printf'打印,需要(signed)int參數。 –
@KeithThompson這不是例子所示嗎? –
@HunterMcMillen:這個例子是在Keith發表評論時編輯的,時機良好。 – AusCBloke
當它被鑄造或被視爲signed
類型。您可能將unsigned int
打印爲int
,並且unsigned
的位序列將對應於負值signed
值。
即。也許你做的事:
unsigned int utc_time;
...
printf("%d", utc_time);
哪裏%d
是signed
整數,相比%u
它用於unsigned
。無論如何,如果您向我們顯示代碼,我們將能夠確定地告訴您。
unsigned
變量中沒有肯定或否定的概念。
大多數(所有?)C程序中的負數表示爲無符號數加1的two's complement。調試器或列出值的程序可能不會將其顯示爲無符號類型,因此您會發現它是二進制補碼。
當然,大多數,但不,不是所有:-) – paxdiablo
確保您使用
printf("%u", utc_time);
顯示它
在迴應評論%u
顯示varible成unsigned int,其中作爲%i
或%d
將顯示varible作爲簽署INT。
0pts - 添加一個描述,你做了什麼,爲什麼它需要一個upvote。 –
感謝您的反饋@威爾。 – mikek3332002
你是如何調試代碼的? printf的? – 2011-12-06 04:41:51
你能告訴我們違規代碼嗎? – AusCBloke