背景
最近琢磨了下iOS中整型溢出的原因、溢出处理,特别是负整型
直接上代码和注释吧:
/// 形式值 = 常规二进制运算获得值
/// 有符号int整型和【形式值】不一定相同
///
/// 运算过程:有符号的int类型为32位,32位可表示的形式值取值范围为 -2147483648~2147483647 [-2^31~2^31-1]
/// 例如,我们认为0x80000160是一个【形式值】,但cpu认为是机器数,0x80000160最高位为1,即负数;转换成二进制表示为10000000000000000000000101100000
/// 计算机计算时会把0x80000160转换成补码来运算
/// 补码 = 模 - 绝对值;或者另一种计算方式:补码 = 负数原码的反码 + 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整型运算过程相同