原码,反码,补码,上溢,下溢

具体的原码,反码,补码我就不详细介绍了,懒得码字~这个知乎上的大佬我觉得已经解释到极限了,写的很好,链接如下:https://zhuanlan.zhihu.com/p/91967268
https://blog.youkuaiyun.com/qq_26948737/article/details/108186404

在具体的上下溢过程中,我看了这两个博客,感觉也还可以:
https://blog.youkuaiyun.com/lwgkzl/article/details/78678211
https://blog.youkuaiyun.com/longintchar/article/details/77870955

接下来是自我总结的部分:
首先看图
在这里插入图片描述
有两个重要的定理:

1. 在机器中运算都是采用加法(+)。

2. 采用补码的方式进行运算。

向下溢出:

  1. 有符号:0-1 == 0 +(-1)=[00000000]补+[11111111]补=[11111111]补= -1 。
    -128-1==[1000,0000]补+[11111111]补=[1,0111,1111],总共9位,去掉最高位1,则变成127.
  2. 无符号:0-1 就相当于00000000向上借一位,变成11111111=255

向上溢出:

  1. 有符号:127+1==[01111111]补+[00000001]补 == [10000000]补==-128,具体为什么[10000000]等于-128可以查看上面提到的经典知乎链接,(-1)+(-127)==[11111111]补+[10000001]补=[1,1000,0000],注意这里最后的结果是9位,而一个字节只有8位,去掉最高位1,就是[1000,0000],也就是-128.
  2. 无符号:255+1=[11111111]补+[00000001]补=[1,0000,0000],这里总共9位,去掉最高位,则为0.

下图为我用CPP写的代码,亲测有效。
在这里插入图片描述
其实Java中本来没有无符号整形,这是C和C++这种偏底层的语言里才能体现出来的,python里其实也有体现,主要是学习下思想,之前一直看,一直忘,这次小结了一下,方便以后忘了再看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值