2012-07-07 75 views
1

在一個big-endian機器中,如果我有一個long變量並將其轉換爲char,語言規範是否保證在鑄造後我會得到最低有效位?整數鑄造在big-endian中

換句話說:

long a = 50; 
char b = (char)a; 
assert(b == 50); /* Is it true? */ 

我知道這是真實的小端機,但對於大端?

+1

它無關,與字節序,你轉換成其他類型的值,如果可能的話。 – 2012-07-07 07:15:56

回答

5

...如果目標類型(和位域寬度)可以表示該值,則值不變;否則,該值是實現定義的。 (§4.7/ 3)。

由於char必須能夠適應值高達至少127,結果在這種情況下,必須是50

+0

我想OP是想知道,是否通過施展他的方式,是否抓住了由於不同的endiannes而產生的「長字節」與「低字節」的「高位字節」。 – 2012-07-07 04:22:18

+0

@JimBuck是的,這是我的實際疑問,以及標準如何具體說明。既然標準談到的是價值而不是字節,我認爲編譯器以最明顯的方式做到這一點,將長字符的「高位字節」放在char中。 – lvella 2012-07-07 16:09:49

+0

@lvella:不,如果有的話,它將*最少*有效字節複製到目的地。複製最高有效位不會保留該值,如果它合適的話。 – 2012-07-07 16:19:23

1

是的。否則很多代碼都會中斷。