黑马程序员技术交流社区

标题: 有没有知道原码,反码,补码的? [打印本页]

作者: RichardM    时间: 2015-7-5 14:48
标题: 有没有知道原码,反码,补码的?
有没有知道原码,反码,补码的?求指教

作者: qq4916097    时间: 2015-7-5 15:33
本帖最后由 qq4916097 于 2015-7-5 15:34 编辑

1.正数的反码=补码=原码  如 3的原码=0000 0011  所以他的反码=补码=0000 0011   
  为什么3的原码是0011呢? 你用8421来看待,千位是8,百位是4,十位是2,个位是1。
  而前面的0000代表 千位(符号位0为正1为负) 百位(64) 十位(32) 各位(16),
  64 32 16 8 4 2 1 想到什么了么 从右向左看  对 没错 就是2的N次方
  0011=>0*8+0*4+1*2+1*1=3  心算3=1+2 即为0011 9=1+8 即为1001 9=2+8 即为1010 以此类推

2.负数的原码
  原码和正数一样,只是将最高位变为1.如-3=1000 0011  因为3=0000 0011 -3就是在3的基础上将符号位变为1 所以为1000 0011

  负数的反码=原码取反(记住 不包括符号位)。如-3的原码是=1000 0011 取反得1111 1100(最左边的1为符号位)

  负数的补码=反码+1,如-3的反码是1111 1100 所以他的补码是1111 1101


作者: 呵呵君    时间: 2015-7-5 20:15
据说,这个是文件加密的原理
作者: 白面馅包子    时间: 2015-7-5 21:02
我只是 来看二楼的答案的
作者: 时光无痕    时间: 2015-7-5 21:11
正数原码,反码,补码都相同。负数原码取反之后是反码,加1是补码。
作者: 时光无痕    时间: 2015-7-5 21:18
本帖最后由 时光无痕 于 2015-7-5 21:24 编辑

正数原码,反码,补码都相同。负数原码取反之后是反码,加1是补码。但是运算过程中符号位不变
作者: 时光无痕    时间: 2015-7-5 21:21
正数原码,反码,补码都相同。负数原码取反之后是反码,加1是补码。但是运算过程中符号位不变。计算机中都是int型。32位最高位就是符号位,0表示正。1是负数,所以如负数2的原码是:1(符号位)000  0000  0000  0010
反码:1111 1111 1111 1101 补码就是+1得:1111 1111 1111 1110                              

作者: sophitia    时间: 2015-7-5 21:32
二楼回答得很好 我也顺面复习了 感谢!
作者: threeforPP    时间: 2015-7-5 21:45
正数原码,反码,补码都相同。负数原码取反之后是反码,加1是补码。
作者: wuwenwen3779    时间: 2015-7-5 22:12
正数的反码和补码,原码 是一样的,负数的反码=原码取反,补码是反码加1
作者: hp_discuz    时间: 2015-7-5 22:17
这里我举个例子说明一下:
作者: 鹰隼展翼    时间: 2015-7-5 22:21
正数原码,反码,补码都一样
作者: 鹰隼展翼    时间: 2015-7-5 22:22
负数的反码是原码除符号位外取反,补码是反码+1
作者: 张业涛    时间: 2015-7-5 22:22
我们平时看到的收拾反码,但是在底层是利用源码做计算的
作者: xuhao3622603    时间: 2015-7-5 22:26
1变0,0变1,正变负加一
作者: hp_discuz    时间: 2015-7-5 22:29
这里我举个例子说明一下:已正整数6举例
6的原码:00000110
6的反码:00000110
6的补码:00000110
已负数-6举例
-6的原码:10000110
-6的反码:11111001
-6的补码:11111010
正整数的原码、反码、补码是一样的
负数的原码在最前面加1,反码是除最前面的1不变,其他位取反;补码是反码加1
作者: 官沛    时间: 2015-7-5 22:35
二楼的解答很详尽,学习了!
作者: wws1214    时间: 2015-7-5 22:36
正数的原码、反码、补码都一样
作者: 冷风然    时间: 2015-7-5 22:42
正数的原反补都一样
作者: 通往牛逼的路上    时间: 2015-7-5 22:49
计算机的运算都是以补码的形式计算的。。
作者: 秀丽xl    时间: 2015-7-5 23:30
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:   [+1]原 = 0000 0001  ;[-1]原 = 1000 0001 反码的表示方法是: 正数的反码是其本身 负数的反码是在其原码的基础上, 符号位不变,其余各个位取反. [+1] = [00000001]原 = [00000001]反 [-1] = [10000001]原 = [11111110]反 如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算. 补码的表示方法是: 正数的补码就是其本身 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1) [+1] = [00000001]原 = [00000001]反 = [00000001]补 [-1] = [10000001]原 = [11111110]反 = [11111111]补 对于负数, 补码表示方式也是无法直观看出其数值的. 通常也需要转换成原码在计算其数值.  对于正数因为三种编码方式的结果都相同: [+1] = [00000001]原 = [00000001]反 = [00000001]补 对于负数: [-1] = [10000001]原 = [11111110]反 = [11111111]补
作者: 东东的一些事    时间: 2015-7-5 23:41
计算机无论是计算还是存储,都是以二进制补码进行的。
作者: 钟志军zzj    时间: 2015-7-5 23:43
正数的原码反码补码都是本身负数的反码最左边的1代表符号不变其它的数和原码相比0变1,1变0补码就是反码+1
作者: 1115302782    时间: 2015-7-6 07:31
我们刚讲过这个
作者: Enhon1992    时间: 2015-7-6 08:21
学习了!!
作者: 云雀    时间: 2015-7-6 08:27
我也想来看看
作者: tinibuzhi    时间: 2015-7-6 08:43
看看计算机组成原理吧
作者: 帅帅loyal    时间: 2015-7-6 08:52
正数的原码,反码,补码都一样,负数的原码最高位是1(符号位),反码是除了最高位以外其他地方都取反,补码是在反码的基础上加1
作者: 杰可可    时间: 2015-7-6 09:00
又复习了一遍
作者: jake_liu    时间: 2015-7-6 17:21
大家都回答的很好,复习了下
作者: q953655369    时间: 2015-7-6 21:30
我知道点 源码是虚拟机的  反码和补码是自己算的
作者: 小绿    时间: 2015-7-6 22:55
2楼回答的好
作者: 自行车呢    时间: 2015-7-6 23:19
二楼的解答很详尽,学习了!




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