黑马程序员技术交流社区

标题: 原码反码补码 [打印本页]

作者: 0751mumu    时间: 2016-2-5 11:10
标题: 原码反码补码
昨天刚学了原码补码反码。
     1. 码是由符号位和数值位组成的,第一位是符号位,正数是0,负数是1.
       问题:视频中局的例子是7.一个字节可以同时把符号位和数值位放下。如果这个数的本身数值位就有8位呢?那他的符号位怎么办?要在占用一个字节吗?(求解答)
      2.反码:正数的反码与原码相同,负数的反码符号位不变,数值位取反。
      3.补码:正数的补码与原码相同,负数的补码是在反码的末位加1。
      问题:经过运算得到的补码在计算机中对应的值是唯一的吗?如果是,能说明下理由吗?
作者: bolt    时间: 2016-2-5 11:21
标题:
1 本身有8位是说 数值换成2进制有8位吗, 那可以用两个字节来存放的。比如short   int还可以存4个字节。
2是的 没啥理由,计算机就是这样存的啊。

作者: 0751mumu    时间: 2016-2-5 12:28
bolt 发表于 2016-2-5 11:21
1 本身有8位是说 数值换成2进制有8位吗, 那可以用两个字节来存放的。比如short   int还可以存4个 ...

第一个,是转换成2进制后刚好8位,那符号位就需要多用一个字节了是吧。
第二个,视频上说得到原码的时候符号位是可能发生改变的。那会不会某个负数的补码跟另一个正数的原码相同?
作者: bolt    时间: 2016-2-5 12:45
0751mumu 发表于 2016-2-5 12:28
第一个,是转换成2进制后刚好8位,那符号位就需要多用一个字节了是吧。
第二个,视频上说得到原码的时候 ...

不会的。 正数不管什么码符号位恒为0 ,负数的补码是反码+1, 反码符号位是1。
视频说原码的符号位是进行位运算改变的吗,数本身已经发生变化了,何况是补码呢。
作者: 0751mumu    时间: 2016-2-5 13:10
bolt 发表于 2016-2-5 12:45
不会的。 正数不管什么码符号位恒为0 ,负数的补码是反码+1, 反码符号位是1。
视频说原码的符号 ...

懂了,听君一席话,胜思十个钟,谢谢
作者: Marvin1993    时间: 2016-2-5 15:16
回答第一个问题:如果这个数本身数值位就有8位,并且它还是有符号位的,那么一个字节就没法表示这个数,如果硬要表示,那么这个数会损失精度,这个数就不是这个数了。应该用更大的空间来存储这个数。
作者: 0751mumu    时间: 2016-2-5 17:05
Marvin1993 发表于 2016-2-5 15:16
回答第一个问题:如果这个数本身数值位就有8位,并且它还是有符号位的,那么一个字节就没法表示这个数,如 ...

谢谢了,看了后面的教程,知道了




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