黑马程序员技术交流社区

标题: 原码反码补码概念及转换 [打印本页]

作者: 三月小雨    时间: 2015-8-10 21:23
标题: 原码反码补码概念及转换
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]

作者: 三月小雨    时间: 2015-8-10 21:24
自己顶沙发
作者: Esther33    时间: 2015-8-10 22:03
还是挺晕的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2