2013-11-25 70 views
1

我想知道當8位值與16位值進行比較時會發生什麼。比較8位值與16位值

我會盡力解釋由代碼示例中的問題:

bool result; 
unsigned char a_8bit = 0xcd; 
unsigned short b_16bit = 0xabcd; 
result = a_8bit < b_16bit; 

可能的結果可能是:

  • a_8bit被強制轉換爲無符號短隱式,並與b_16bit爲16位值。結果爲真
  • b_16bit隱式轉換爲無符號字符並與a_8bit作爲8位值進行比較。結果是錯誤的

有沒有人有線索編譯器會用這段代碼做什麼?當然,我可以嘗試一下,但是這個代碼的不同編譯器有不同的解釋嗎?

+0

將兩者的算術轉換爲int。然後鑄造成布爾。但int的大小是實現定義的 –

+0

@Koushik沒有轉換爲'bool'。 '<'的結果已經有'bool'類型。 –

回答

2

比BOOL,char16_t,char32_t,或wchar_t的其整轉換秩(4.13)以外的整數類型的prvalue小於INT的秩可以被轉換成一個int類型的prvalue如果INT可以表示源類型的所有值;否則,可以將源prvalue轉換爲unsigned int類型的prvalue。 [§4.5]

因此,編譯器可以將它們都提升爲unsigned int,然後進行比較。

+0

是不是int,因爲int可以表示兩個操作數的值? –

+0

編譯器可以在'unsigned int'和'unsigned short'之間進行選擇,因爲兩者都可以表示兩個值,但標準對'int'更具體。 – deepmax

+0

@MM。 _IF_「int」的大小大於「short」的大小。但是在典型的32位(或64位)的機器上,是的。在比較之前,它們都將被轉換爲「int」。 –

1

第一,雖然是精確的,兩者都轉換爲無符號,然後進行比較。