A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 三月小雨 中级黑马   /  2015-8-10 21:23  /  583 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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]

2 个回复

倒序浏览
自己顶沙发
回复 使用道具 举报
还是挺晕的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马