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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sen 中级黑马   /  2014-4-13 21:42  /  1572 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 sen 于 2014-5-20 11:59 编辑

在网上搜索了很多资料,可是太复杂了。
无法看懂,求简单不抽象的解释

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

9 个回复

倒序浏览
本帖最后由 blz01003hm 于 2014-4-13 22:38 编辑

3的原码是0000 0011即3除以2商1余数是1  用商1除以2商是0余数是1  即0第一位, 第一个余数第二位,第二个余数第三位即 011 (但电脑里一个字节由8个位组成 不足用0补)
3的反码是1111 1100即0000 0011取反1111 1100 即0变1,1变0
3的补码是0000 0011
回复 使用道具 举报
原码:就是二进制数,以2为例子,首先2是整数,因此占用了4个字节,八位;所以
原码是:0000 0010  
方法:从右往左以2的次方来算,从0开始,因此是0乘2的7次方+0乘2的6次方+0乘2的5次方+0乘2的4次方+0乘2的3次方+1乘2的1次方+0乘2的0次方  所以是2;
反码:就是将0变1,1变0,所以变成了1111 1101
补码:就是反码加1  变成了1111 1110

注:反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
      补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
首先    正码(源码)   反码   补码他们在内存中都是二进制储存的     而且都是他们的补码
下面以正12和-12为例
12的二进制
     12在内存中存储的是它的补码
     00000000  00000000 00000000 00001100
     正数的特点:  (三码合一) 正数的原码就是TA的反码就是TA的补码
     
     
     -12
     二进制的最高位我们称之为符号位
     如果符号位是0代表是一个正数,
     如果符号位是1代表是一个负数
     
     10000000  00000000 00000000 00001100 (-12的原码)
     11111111  11111111 11111111 11110011(反码, 符号位不变其它位取反)
     
     11111111  11111111 11111111 11110011
    +00000000  00000000 00000000 00000001
     _____________________________________________
     11111111  11111111 11111111 11110100(补码 , 反码+1)
     
     结论:无论正数负数在内存中存储的都是补码
     
     
     
     11111111  11111111 11111111 11110101 (补码)
    -00000000  00000000 00000000 00000001  (-1)
     _____________________________________________
     11111111  11111111 11111111 11110100 (反码)
     10000000  00000000 00000000 00001011
     

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报 1 0
http://850361034.blog.163.com/blog/static/3280380920143130203305/   楼主想详细了解可以看下我的这篇博客
回复 使用道具 举报
本帖最后由 Dmajor 于 2014-4-14 10:04 编辑

其实很简单的 先看数的正负,正数的三码相同
负数的原码首位是1,其后是相应正数的二进制码
反码是在原码的基础上除符号位不变外,其余的取反 (取反就是0变1,1变0)
补码就是在反码的基础上加1
例如:+5的原码,反码,补码都是 0101(正数首位为0)
       -5的原码是:1101(负数首位为1)
                反码:1010(除过符号位,其余取反)
                补码:1011(在反码的基础上加1)

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
1.数据在计算机内存中是以二进制形式进行存储的,在存储时要先开辟空间,然后再进行存储。
2.一个字节八个二进制位,整数的最高位为0,负数的最高位为1,正数的原码、反码、补码都一样(三位一体),负数的反码是原码取反,负数的补码是反码加1,在计算机二进制是以反码形式进行存储的。

评分

参与人数 1黑马币 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
源码,反码,补码都是在二进制下算的。
例:char 字型中的1,源码是0[/color]000 0001.
      第一个0通常来做符号,也就是正号和负号。
     剩下的来表示值。
反码:正数的反码是其本身
        负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
     [+1] = [00000001]原 = [00000001]反
       [-1] = [10000001]原 = [11111110]反
补码:正数的补码就是其本身
      负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
      [+1] = [00000001]原 = [00000001]反 = [00000001]补
      [-1] = [10000001]原 = [11111110]反 = [11111111]补

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
sen 中级黑马 2014-4-15 15:11:45
9#
好的 谢谢大家
回复 使用道具 举报
其实我比较疑问的是为什么,正数的原码、反码、补码是三码一体,而负数的却是反码为符号位不变,其他位按位取反,补码又是反码+1??又为什么是+1,而不是其他的值???
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马