在一個big-endian機器中,如果我有一個long
變量並將其轉換爲char
,語言規範是否保證在鑄造後我會得到最低有效位?整數鑄造在big-endian中
換句話說:
long a = 50;
char b = (char)a;
assert(b == 50); /* Is it true? */
我知道這是真實的小端機,但對於大端?
在一個big-endian機器中,如果我有一個long
變量並將其轉換爲char
,語言規範是否保證在鑄造後我會得到最低有效位?整數鑄造在big-endian中
換句話說:
long a = 50;
char b = (char)a;
assert(b == 50); /* Is it true? */
我知道這是真實的小端機,但對於大端?
...如果目標類型(和位域寬度)可以表示該值,則值不變;否則,該值是實現定義的。 (§4.7/ 3)。
由於char
必須能夠適應值高達至少127,結果在這種情況下,必須是50
我想OP是想知道,是否通過施展他的方式,是否抓住了由於不同的endiannes而產生的「長字節」與「低字節」的「高位字節」。 – 2012-07-07 04:22:18
@JimBuck是的,這是我的實際疑問,以及標準如何具體說明。既然標準談到的是價值而不是字節,我認爲編譯器以最明顯的方式做到這一點,將長字符的「高位字節」放在char中。 – lvella 2012-07-07 16:09:49
@lvella:不,如果有的話,它將*最少*有效字節複製到目的地。複製最高有效位不會保留該值,如果它合適的話。 – 2012-07-07 16:19:23
是的。否則很多代碼都會中斷。
它無關,與字節序,你轉換成其他類型的值,如果可能的話。 – 2012-07-07 07:15:56