iOS基础-学习笔记82 11-原码反码补码概念及转换 1、 基本概念 数据在计算机内部是以补码的形式储存的 数据分为有符号数和无符号数, 无符号数都为正数,由十进制直接转换到二进制直接存储(其实也是该十进制的补码)即可。 有符号数用在计算机内部是以补码的形式储存的。(正数的最高位是符号位0,负数的最高位是符号位1.对于正数:反码==补码==原码。对于负数:反码==除符号位意外的各位取反。补码=反码+1) 正数的首位地址为0,其原码是由十进制数转换到二进制数字 负数的首位地址为1,其原码后面的位也为10进制数转换过去的2进制数,都是用补码方式表示有符号数的。 (1) 原码 原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制: [+1]原 = 00000001 [-1]原 = 10000001 第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是: [1111 1111 , 0111 1111] 即 [-127 , 127] 原码是人脑最容易理解和计算的表示方式. (2)反码: 反码的表示方法是: 正数的反码是其本身 负数的反码是在其原码的基础上, 符号位不变,其余各个位取反. [+1] = [00000001]原 =[00000001]反 [-1] = [10000001]原 =[11111110]反 可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算. 简单说,由原码得反码机器数为正时,二者相同。负时,符号位(表示正负号的那一位)不变,其余数值位全部按位取反 (3)补码 补码的表示方法是: 正数的补码就是其本身 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1) [+1] = [00000001]原 = [00000001]反 = [00000001]补 [-1] = [10000001]原 = [11111110]反 = [11111111]补 对于负数, 补码表示方式也是人脑无法直观看出其数值的.通常也需要转换成原码在计算其数值. 简单说,正数时原补相同,负数时,符号位(表示正负号的那一位)不变,其余数值位全部按位取反后再加一。所以说,负数的补码就等于该数的反码加一。 2、-1在内存中存储细节 [-1] = [10000001]原 = [11111110]反 = [11111111]补 |