2017-02-16 61 views
1

在我的教科書中,它表示所有整數都被認爲是默認簽名的,我在網上找到的大部分源文件都說要對浮點數進行簽名,那麼使用signed關鍵字有什麼意義呢?爲什麼你要指定一個整數作爲C簽名?

+3

您可能會將它用於'char'變量,它們[默認情況下未指定爲有符號或無符號](http://stackoverflow.com/questions/2054939/is-char-signed-or- unsigned -默認)。 –

回答

6

在C語言中,你可以省略類型名的部分,所以你可以實際使用signed代替int,這可能看起來很好的對稱:

void f(signed a, unsigned b); 

或者更冗長:

unsigned int foo; 
signed int bar; 

如果您在附近不使用這兩種類型,則可能更喜歡名稱更簡單的形式:

int x; // normal 
auto y; // quaint 
signed auto graph; // why not 
2

至少有兩種情況需要關鍵字unsigned。因爲它可以表現爲signed charunsigned char。這有三種不同的類型:char,signed charunsigned char

第二個問題是在位字段中使用關鍵字,因爲具有類型說明符int的位字段的行爲可以是signed intunsigned int

+0

C11聽起來像一個簡單的'int'不會被允許作爲一個位域的類型(6.7.2.1/5)移植。 –

+0

@KerrekSB有一篇文章寫道:「對於位字段,它是實現定義的,是指定int指定的是與signed int相同的類型還是與unsigned int指定的類型相同。 –

+0

我現在看到它,謝謝! –

0

signed單詞沒有得到太多的使用。 unsigned會這樣做,因爲所有整數類型(char值得檢查) 都自我定義爲signed。 unsigned floatunsigned doubleunsigned long double不存在。 //signed float/double/long double are errors to.

+0

'長雙'是有效C. – alk

+0

是的,但'簽名長雙'和'無符號長雙'arent –

相關問題