var i uint8 = 128
fmt.Println(int8(i)) //結(jié)果為-128
很顯然這里出現(xiàn)了越界的情況,int8類型的范圍是-128~127,所以uint8類型的128轉(zhuǎn)換為int8類型時(shí)會(huì)出現(xiàn)越界。那么這里是怎么出現(xiàn)-128結(jié)果的呢?
原來計(jì)算機(jī)中都是以補(bǔ)碼進(jìn)行存儲(chǔ)的。uint8類型的128,原碼為1000 0000,補(bǔ)碼也為1000 0000;當(dāng)轉(zhuǎn)換為int8類型時(shí),補(bǔ)碼還是1000 0000,這里就變成了已知補(bǔ)碼求原碼;首位代表符號(hào)位,不做處理,其余各位按位取反再加1,截?cái)嘀罂梢缘贸?000 0000,即-128。