原码、反码和补码理解
来源:互联网 发布:数控螺纹g76编程格式 编辑:程序博客网 时间:2024/05/29 05:10
计算机中,数的表示形式有三种----原码、反码和补码。概念上是有三种,但是实际上计算机中数字都是以补码的形式存在的。
原码和反码都不能解决+0和-0的问题。
[+0]原=0 0000000 (假设是八位)
[-0]原=1 0000000
正数的原反补都是一样的。
看下-0的反码,负数的反码是符号位不动,其余各位取反。
[-0]反=1 1111111
不论原码还是反码,对于同一个0,却有两种不同的状态,对于8位机器数来说,8位共有256中不同的状态,理论上是可以表示256个数的。但是由于一个0就占了两种状态,所以实际上原码和反码只能表示255个数,(0 1111111)表示127 最小的只能到-127(1 1111111),共255个数字。
补码解决了+0和-0不同状态的问题,来看下。
+0和原来还是一样的(0 0000000),看下-0,负数的补码是在反码的基础上末尾加1
[-0]反=1 1111111,末尾加1会导致进位溢出,将溢出位丢掉变成0 0000000。所以和原码是一样的。由于补码的0状态的统一,所以8位机器数的补码是可以表示256个数的。最大的和原来是一样的+127(0 1111111),按照这样推理,负数应该能能表示到-128才能一共有256个数。那么-128的补码是多少呢?实际上,补码有这样的规律,它是不断循环的,将+127加1就变成了-128。
所以-128的补码是0 1111111+1=1 0000000.
那么将-128加1是-127么?显然是这样的。看下 1 0000000+1=1 0000001
将1 0000001转成原码。将补码转成原码有两种方法。
1. 一个数补码的补码就是原码,所以只要将1 0000001再求补码,就是它的原码了。
2. 求补码的过程逆向,就是将补码的先减1,再除符号位以外取反。
显然,1 0000001转成原码后是1 1111111,这个数显然是-127了。
再将-1的补码试着加1看是否是0
[-1]补=1 1111111+1=0 0000000,的确是0
所以从上面可以看出,一个数的补码表示形式是循环的,对这个数不断的加1会由负的最小逐渐的增加到0,再由0逐渐的增加到正的最大,此时再加1就又变成负的最小了,不断循环。
- 原码、反码和补码理解
- 理解原码,反码和补码
- 原码、反码和补码
- 原码、补码和反码
- 原码、补码和反码
- 原码、反码和补码
- 原码、反码和补码
- 原码、反码和补码
- 原码、反码和补码
- 原码、反码和补码
- 原码、补码和反码
- 原码、补码和反码
- 原码、反码和补码
- 原码、反码和补码
- 原码、补码和反码
- 原码、补码和反码
- 原码、补码和反码
- 原码、反码和补码
- 映射网络驱动器MFC
- 莫言教学常启迪学生多动脑 主张把自己当罪人写-莫言-诺贝尔文学奖-兰传斌
- rails rspec测试
- myeclipse安装SVN
- 生产者-消费者问题
- 原码、反码和补码理解
- Ubuntu 开启 SSH服务
- 和菜鸟一起学数据结构之简单静态链表实现
- 成都国安局称1名男子泄漏王立军案侦办信息被拘-成都-王立军-侦办
- mobile agent 学习
- 虚拟化、云计算、开放源代码及其他
- 第七周任务 3-5
- hdu1582AC again-bfs
- python 实现linux命令 strings