计算机中的原码、反码与补码
2015-06-18 22:44
375 查看
很久之前学习过的东西了,最近发现都快忘记了,重新记录一下。
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:
[1111 1111 , 0111 1111]
即
[-127 , 127]
原码是人脑最容易理解和计算的表示方式.
反码的表示方法是:
正数的反码是其本身
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算.
补码的表示方法是:
正数的补码就是其本身
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.
顺便,记住几个特殊的数的补码。假如二进制位数为8,则0为0000 0000。-1为1111 1111。127为0111 1111。-128为1000 0000。
1. 原码
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符号位. 因为第一位是符号位, 所以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]补
对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.
顺便,记住几个特殊的数的补码。假如二进制位数为8,则0为0000 0000。-1为1111 1111。127为0111 1111。-128为1000 0000。
相关文章推荐
- 网络请求(XUtils)+JSON解析(Gson)
- 检查HTTP 的 Digest 认证代码示例-JSP
- 【枚举】bzoj3391 [Usaco2004 Dec]Tree Cutting网络破坏
- 【Linux 内核网络协议栈源码剖析】af_inet.c——INET Socket层(2)
- http简介
- 【kd-tree】bzoj3290 Theresa与数据结构
- 数据结构学习之双向循环链表的基本操作(非递归实现)
- Android快速入门(转自 农民伯伯: http://www.cnblogs.com/over140/)
- iOS开发网络数据之AFNetworking使用1
- 黑马程序员------网络编程
- muduo网络图书馆评测
- 数据结构学习之单向链表的基本操作(非递归实现)
- 黑马程序员----Java网络编程
- Linux网络编程——tcp并发服务器(epoll实现)
- java https请求 源码 微信
- poj 1459 Power Network 网络流
- Java进行https请求需要证书的问题 unable to find valid certification path to requested target
- OpenCV基础篇之Mat数据结构
- 网络传输中send与recv需要注意的地方----------来自博客讨论
- linux中手工编译安装httpd服务全操作过程