Java学习笔记1.——原码反码补码和数据类型

Java学习笔记1.——原码反码补码和数据类型



前言

学习记录,巩固知识,查缺补漏,我观看的是黑马程序员的视频做的笔记。
原码反码补码的正数均是相同的,有差异的只是负数。


提示:以下是本篇文章正文内容,下面案例可供参考

一、原码

十进制数的二进制表现形式,比如0000 0001,其中一个字节有8位,所以1B(Byte) = 8 b(bit)
从左往右,第一位为符号位,所以一字节最大为0111 1111 等于+127十进制。
原码的负数就是符号位取反,其余位不变,所以-1的原码是1000 0001。同理原码的最小负数为-127。
原码的0有两种表示方法,分别是 0000 0000 和 1000 0000为什么有两个0,则是在减法那里说了。

1.原码的加法

0000 0001 加1等于 0000 0002B == 2D
0000 0002 +1 == 0000 0003B ==3D
因为原码有两种表示方法,所以原码的减法就会有一定的问题。

2.原码的减法

1000 0001 - 1000 0001 = 1000 0000=0
0000 0001 - 0000 0001 = 0000 0000=0(这就是为什么原码有两个0的原因。)

1000 0000 等于 -0(也是0) 按理来说0+1==1可是原码算出来是等于-1
1000 0000 +1 == 1000 0001 == -1 与实际值0+1 ==1不同
1000 0001 +1 == 1000 0010 == -2 与实际值 -1+1 == 0不同
1000 0010 +1 == 1000 0011 == -3 与实际值-2+1 == -1不同
它们总是差值总是为2.
从数轴上看是因为两者的方向是相反的。
在这里插入图片描述
所以在这里引入反码,使它们方向相同。

二、 反码

因为符号位变了代表方向相反,所以把数值位也取反代表整体换了个方向,因此反码就是原码的基础上取反。
原码的正数和反码相同,只有负数才不一样,因为原码的正数计算是没有问题,有问题的是反码。
原码的0有两种表示方式,所以反码的0也有两种表示方式,分别是
0000 0000 和 1111 1111
现在来试试反码的减法是否正确。

1.反码的计算

原码1000 0001 的反码是 1111 1110 -1 +1
1111 1110 + 0000 0001 == 1111 1111 == 0
现在再看发现没有问题了。
再来试一个-1-1是否等于-2
1111 1110 - 0000 0001 == 1111 1101 == -2
注意! -1-1与-1-(-1)是不一样的 因为1111 1110 - 1111 1110 == 1000 0000 == -127

2.反码的跨零计算

再次注意,当反码-2+3时结果有不一样了。
-2+3=1
但是反码就不一样了,加起来会等于0
1111 1101 + 0000 0011 =0000 0000 (超出的部分不用管,所以这里符号位变了。)
这是因为0有两个表示方法,所以在这里进行夸0

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专注技术200年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值