1 回答

TA貢獻1859條經(jīng)驗 獲得超6個贊
書上的話好理解,你問的問題有點深奧,聽不明白。我只能把書上的話翻譯一遍。
short fowl=chickens+ducks; 這句話看起來是一個簡單的加法,卻做了幾件事情。一、把2字節(jié)的chickens和ducks分別轉(zhuǎn)換成4字節(jié)的“有符號整數(shù)”,即轉(zhuǎn)換成int(如圖中的兩個movsx指令)。然后做加法(圖中的add指令),最后把加的結(jié)果轉(zhuǎn)換成2字節(jié)后賦給fowl(圖中最后一句mov,此處的(類型)轉(zhuǎn)換就是取寄存器eax的低16位賦給了fowl)。
書上說的提升,一般可以理解為變量所占內(nèi)存的大小有所改變,如2字節(jié)變?yōu)榱?字節(jié)。這時候,編譯器會對這個變量做(有符號或無符號的)擴展。如使用movsx指令,指令中的s即表示有符號之意。相應的,還有零擴展指令movzx,這個可以用于對無符號整數(shù)作擴展。
【】里說明了,當short(所占內(nèi)存空間)的大小比int小時,unsigned short會轉(zhuǎn)換成int;如果相同時,unsigned short將轉(zhuǎn)換成unsigned int?!安粫p失數(shù)據(jù)”指的是變量的所有位在擴展后都保留下來了,沒有丟失任何位。相反地,int轉(zhuǎn)換成short,往往在由大轉(zhuǎn)換成小時丟失位數(shù),因為裝不下了。
我這里所說的大小指的是所占內(nèi)存的多少,即所占字節(jié)的多少,而不是指5>4這種含義的大小。
- 1 回答
- 0 關(guān)注
- 210 瀏覽
添加回答
舉報