2014-09-21 43 views
1

以上內容是關於C中的隱式積分促銷/轉換,取自Mike Banahan的書 Section 2.8.1.1 (Link)。以下是確切段落的內容:「如果一個int可以保存原始類型的所有值,則該值被轉換爲int,否則轉換爲unsigned int」 - 這意味着什麼?

由C以低於int的精度進行算術運算,因此幾乎每當您使用表達式中列出的某個對象時,都會隱含這些轉換。所述轉化率定義爲如下:

每當一個短或一個char(或我們 尚未達到的位字段或枚舉類型)具有積分優惠施加

  • 如果int可以保持所有的原始類型,則 值被轉換的值的爲int
  • 否則,轉換將是無符號整型

以下是我對粗體部分的疑惑。請清除以下內容:

  • 是不是「其他」部分是多餘的?如果不是所有的焦炭類型適合的INT默認鑑於INT比無論是在大小? 不適合int和要求無符號int甚至出現的問題?
  • 「其他」部分是如何有效的 - 如果一個負短整數被隱式轉換爲無符號整型,它的值是否會改變?

儘管我很想將它視爲微不足道,但我覺得得到一個合適的解釋會更好。謝謝。

+1

int可以支持短的所有值,但不一定是無符號的所有值短。 – 2014-09-21 02:51:51

回答

2

int類型(根據C標準)不一定要大於shortint只能「不能短於」short。例如,它們都可以是16位。在這種情況下,可能有一個unsigned short的值不適合int

(上C data types的維基百科頁面是非常發人深省。)

+0

添加對C規範的引用以改進您的答案。 – ericbn 2014-09-21 02:57:31

相關問題