博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java基础-原码反码补码
阅读量:6680 次
发布时间:2019-06-25

本文共 1640 字,大约阅读时间需要 5 分钟。

                    Java基础-原码反码补码

                                  作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

 

  注意,我们这里举列的原码和反码只是为了求负数的补码,在计算机中没有原码,反码的存在,只有补码。

 

一.原码

1>.正数的原码就是它的本身

  假设使用一个字节存储整数,整数10的原码是:0000 1010

2>.负数用最高位是1表示负数

  假设使用一个字节存储整数,整数-10的原码是:1000 1010

 

二.反码

1>.正数的反码跟原码一样

  假设使用一个字节存储整数,整数10的反码是:0000 1010

2>.负数的反码是负数的原码按位取反(0变1,1变0),符号位不变

  假设使用一个字节存储整数,整数-10的反码是:1111 0101

 

三.补码(再次强调,整数的补码才是在计算机中的存储形式。)

1>.正数的补码和原码一样

  假设使用一个字节存储整数,整数10的补码是:0000 1010(第三次强调:这一串是10这个整数在计算机中存储形式)

2>.负数的补码是负数的反码加1

  假设使用一个字节存储整数,整数-10的补码是:1111 0110(第三次强调:这一串是-10这个整数在计算机中存储形式)

 

四.在计算机中,为什么不用原码和反码,而是用补码呢?

  因为在使用原码,反码在计算时不准确,使用补码计算时才准确。

1>.使用原码计算10-10

         0000 1010  (10的原码)

    +        1000 1010   (-10的原码)

------------------------------------------------------------

         1001 0100  (结果为:-20,很显然按照原码计算答案是否定的。)

2>.使用反码计算10-10

      0000 1010  (10的反码)

    +   1111 0101  (-10的反码)

------------------------------------------------------------

      1111 1111  (计算的结果为反码,我们转换为原码的结果为:1000 0000,最终的结果为:-0,很显然按照反码计算答案也是否定的。)

3>.使用补码计算10-10

      0000 1010  (10的补码)

   +   1111  0110  (-10的补码)

------------------------------------------------------------

      1 0000 0000  (由于我们这里使用了的1个字节存储,因此只能存储8位,最高位(第九位)那个1没有地方存,就被丢弃了。因此,结果为:0)

 

五.小试牛刀

  有了上面的案例,接下来,我们来做几个小练习吧,分别计算以下反码表示的十进制数字是多少呢?

1>.0b0000 1111

  相信这个数字大家异口同声的就能说出它的答案是:15(因为正数的补码和原码一样)

2>.0b1111 1111

  计算过程:0b1111 1111(补码)------>0b1111 1110(反码)------>0b1000 0001(原码)

  将其换算成原码之后就可以得到最后的结果为:-1

3>.0b1111 0000

  计算过程:0b1111 0000(补码)------>0b1110 1111(反码)------>0b10010000(原码)

  将其换算成原码之后就可以得到最后的结果为:-16

4>.0b1000 0001

  计算过程:0b1000 0001(补码)------>0b1000 0000(反码)------->0b1111 1111(原码)

  将其换算成原码之后就可以得到最后的结果为:-127

 

你可能感兴趣的文章
COMP9321/19T1/resources/22490
查看>>
使用JSON实现分页
查看>>
如何优雅地使用Markdown (Sublime 3 + MarkdownEditing+OmniMarkupPreviewer)
查看>>
HTML+5+从入门到精通
查看>>
安全退出调用多个Activity的Application
查看>>
pdf怎么编辑连续页码
查看>>
非openresty方式安装Nginx + Lua + Redis 环境
查看>>
记2012-2013年一路的Windows Phone历程
查看>>
本博客搬家辣
查看>>
sysstat安装
查看>>
修改root密码
查看>>
Java语言Switch语句详解
查看>>
在Word 2007文档表格中设置行高度和列宽度
查看>>
微软云计算,有多近?有多远?
查看>>
android:layout_gravity和android:gravity
查看>>
我的友情链接
查看>>
使用 docker-compose 批量创建机器
查看>>
洛谷——P2820 局域网
查看>>
php获取数组第一个数组单元值的方法
查看>>
关于MYSQL的一些命令
查看>>