背景
最近琢磨了下iOS中整型溢出的原因颠黎、溢出處理,特別是負整型
直接上代碼和注釋吧:
/// 形式值 = 常規(guī)二進制運算獲得值
/// 有符號int整型和【形式值】不一定相同
///
/// 運算過程:有符號的int類型為32位滞项,32位可表示的形式值取值范圍為 -2147483648~2147483647 [-2^31~2^31-1]
/// 例如狭归,我們認為0x80000160是一個【形式值】,但cpu認為是機器數(shù)文判,0x80000160最高位為1过椎,即負數(shù);轉(zhuǎn)換成二進制表示為10000000000000000000000101100000
/// 計算機計算時會把0x80000160轉(zhuǎn)換成補碼來運算
/// 補碼 = 模 - 絕對值戏仓;或者另一種計算方式:補碼 = 負數(shù)原碼的反碼 + 1
signed int i1 = 0x80000160; // 形式值0x80000160 = 2147484000
printf("有符號int整型 = %d\n", i1); // 輸出:有符號int整型 = -2147483296疚宇;expect error:輸入正竞惋,輸出負
/// 無符號int整型和【形式值】相同
unsigned int i2 = 0x80000160; // 形式值0x80000160 = 2147484000
printf("無符號int整型 = %u\n", i2); // 輸出:無符號int整型 = 2147484000
/// 除了取值范圍,long整型和int整型運算過程相同