原码、反码、补码学习总结
原码反码补码的定义
原码:十进制数据的二进制表现形式,最左边是符号位,0为正,1为负
反码:正数的补码反码是其本身,负数的反码是符号位保持不变,其余位取反
补码:正数的补码是其本身,负数的补码是在其反码的基础上1
原码
比如12的二进制就是00001100,其中每个0或1叫做一个比特位(bit),8个bit为一组称作字节。
不难看出,原码的最大值是01111111,及十进制的127,最小值是11111111,及-127。
利用原码对正数进行计算是不会有问题的 。
但是在对负数进行运算时会有一些弊端。
原码的弊端
在对10000000进行加一运算时,-0+1结果应该是1,但是原码的结果是10000001也就是-1,再加一,-1+1的结果应该是0,但是原码却是10000010也就是-2。
所以,如果是负数计算,结果就会出错,实际运算的结果,跟我们预期的结果是相反的。
反码
为了解决原码不能计算呢负数的问题而出现了反码。
计算规则:正数的反码不变,负数的反码在原码的基础上,符号位不变,数值取反,0变1,1变0。
例:-12的原码是10001100反码是11110011,-12+1=-11,11110011+1=11110100,再转化为原码就是10001011也就是-11
反码的不足
-0的原码是10000000,对其反码(11111111)加一得到00000000按照规则,00000000的原码还是00000000也就是十进制数字的0,-0+1=0是显然不对的
反码计算时,跨零会出现误差1,所以有了补码
补码
为了除掉误差,规定正数的补码不变,负数的补码在反码的基础上加一
误差消除了,但是因为补码是在反码的基础上加一所以-127的补码变成了10000001,空出来了一个10000000,于是规定10000000表示十进制的-128,-128没有原码和反码
所以一个字节的存储范围是-128到127
另外计算机中的存储和计算都是以补码的形式进行的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!