运算符-12-多学一招原码反码补码,隐式和强制转换,位运算

下面来解释这些东西是怎么来的

原码

例如: 

最左边的叫做符号位,0 为正,1 为负,后面的才是具体的数值

在计算机中,一个 0 或者 1 所占的空间叫 bit 中文名叫比特位,八个 bit 就称为一个字节,字节是计算机中最小的数据单位  

下面是一个字节可以表示的最大值和最小值(byte 类型占一个字节,但取值范围是 -128~127,到后面就会解释到一个字节表示的最大值和最小值其实是 -128~127)

原码的弊端

 1000_0000   表示  -0   在这个基础上我们进行 +1

 1000_0001   表示 -1    正确值:1,实际值:-1  在这个基础上我们在进行+1

 1000_0010   表示-2     正确值:0,实际值:-2  在这个基础上我们在进行+1

 1000_0011   表示-3     正确值:-1,实际值:-3 

从上面可以发现,在计算机运算的时候,因为没有正负号,只能采用 0,1 代表正负, 在进行

负数运算的时候会存在弊端 

 反码

 我们可以发现,负数中反码运算的 +1 就是原码运算的 -1,取到了相反的作用, 从而解决了原码运算中负数的运算弊端

但同时又发现了一个问题,+0 和 -0 都是 0 但是反码和原码都不一样,所以当运用反码进行跨 0 运算的时候又产生了一个误差,例如:-5 + 6 的正确值为 1,但实际值却是 0  

补码

因为 0 又两个编码表示,为了减少一个 0 的编码,就出现了补码,

 补码就是将负数的反码在 +1 ,正数的依旧不变,这样讲反码错开一位之后,+0 和 -0 就是相同的表现形式,就避免了反码跨0运算误差的问题 

 也正是因为补码是错位的反码,所以  -127 的反码就给了 -128,这也就解释了为什么一个字节所表达的范围是  -128~127

也正是因为上面的原因,在计算机中数字的存储还有运算都是以补码的来进行运算的

小结

 在多学几招

 

 隐形转换的底层就是前面进行补 0 即可

 强制转换的底层就是删掉前面多余的字节,所以在容量溢出和数值的正负上会有精度问题

位运算符

 

 左移一次就相当于 *2 

 补 0 和 1 根据原来的数值的正负来补对应的 0 和 1

右移一次就相当于 /2

 和右移类似,就是高位不管是正数还是负数都补 0

【黑马程序员Java零基础视频教程_上部(2022新版Java入门,含斯坦福大学练习题+力扣算法题+大厂java面试题)】https://www.bilibili.com/video/BV17F411T7Ao?p=38&vd_source=04c9e32408f61b4fd8bec53b61c24bd9

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值