二进制与二进制运算


1. 二进制与十进制

1. 1-原码

原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。(-百度百科)
缺点:不能直接参与运算,对于值相等的正负数字相加,往往得不到结果‘0’。如0000_1110(14)+1000_1110(-14)=1001_1100。

1. 2-反码

反码通常是用来由原码求补码或者由补码求原码的过渡码。反码跟原码是正数时,一样;负数时,反码就是原码符号位除外,其他位按位取反。(-百度百科)

1. 3-补码(原码反码没啥好说的,重点是这里)

1. 3.1-为嘛要选择这么麻烦的记录方式

要说这个问题,就要回到原码中,因为原码不能直接参与运算,例如在日常中-4+4的结果是0,但是换成原码相加,则结果肯定不是0,不管你是否忽略掉符合位。

那么,如何记录数字?(-百度百科

先说一个问题,如何让指针指向0点(以时钟为例,时钟是12进制,也更好理解,下图我自己将12该成0,这样更符合计算机中的数字)

答案是两种:
顺时针拨动4个小时和逆时针波动8个小时。分别代表了两种运算{8点钟加4小时}与{8点中减8小时},即8+4=8-8。然后就可以知道,4等价于-8
顺便多一句,你可能对于顺时针的拨动的“4”,是不加思考,由生活经验直接口算出来的,这个“4”其实就是钟表上的数字个数(12,0-11是12个数字)减去当前值(8)得出的 8+(12-8)。
进一步推到,上面的4等价于-8得到12-8=-8


ok,有了这些信息,下一步就用到计算机存储中。 以byte为例,规定一下符号位在最高为,0正1负,那我们还剩下7个位可以存储。 假如要存储-6,根据上面例子推出的,其实也可以存储 **byte的能表示的数字个数(111_1111+1)-6**,用原码运算一下,就是下图


切记切记 到这里还没有完,别忘了,上图中的被减数是byte的最大值,但是理应是byte的能表示的数字个数,所以我们要在结果上在加1。

最终,再加上符号位1,最终结果,就是1111_1010


比较一下+6的二进制与-6的二进制

得出结论:-6的表示方法为+6的反码+1,符号为1(正数的补码就是原码,负数的补码就是符号位不动,其正数的反码+1)


关于+6与-6的补码相加运算就不展开验证了,就当个作业吧,看到的在评论区自觉完成~。

附记:关于这些也是自己刚看的,一直好奇补码的这种存储方式,百度百科是以钟表为例,其实本质都是一样,当前任意值一直加加加,就会陷入循环往复之中,早晚会与起始值相同。(byte最大值+1是0,因为溢出了~)。
此篇结束也留下个疑问,为什么负数的补码会与正数的反码+1恰好相等,还是说我这种推导是错误的。
最后,如有纰漏,不吝赐教。







文章地址:https://www.cnblogs.com/haoxinxin/p/15613243.html

文章来源:https://www.cnblogs.com/haoxinxin/p/15613243.html

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
管理员
上一篇:Roslyn+T4+EnvDTE项目完全自动化(1) ——类自动生成界面
下一篇:windows平台的分布式微服务解决方案(2)--跨域访问
评论列表

发表评论

评论内容
昵称:
关联文章

二进制二进制运算
JavaScript JS高精度计算方法库推荐,数值运算误差
C#的进化——C#发展史、C#1.0-10.0语法系统性梳理、C#JAVA的对比
2.客户端服务端连接
MYSQL数据库连接工具: DBeaver Navicat
C#基础系列-过滤器特性
C# 时间戳 标准时间互转
ManualResetEvent实现线程的暂停恢复
【.NET 树莓派】MPD 的 Mini-API 封装
iNeuOS工业互联网操作系统,增加DTU平台实时交互的应用场景
微信支付:header中的mchidpost payload中的mchid不匹配
C# XML 序列化反序列化详解及实战示例
如何在 .NET 8 服务中指定端口号启动:最佳实践动态配置
C#实现INotifyPropertyChanged的优雅封装方案(含简洁写法自动生成)
.NET中大型项目开发必备(9)--http请求调用(PostGet)
.NET中大型项目开发必备(10)--图片的裁剪、缩放、加水印
JS魔法堂:函数节流(throttle)函数去抖(debounce)
SEO优化:HTML5扩展之微数据丰富网页摘要
.NET 高效依赖注入:使用 Lazy<T> 和工厂模式优化性能内存占用
微信支付:JSAPI支付失败 报错:微信登录失败, redirect_uri域名后台配置不一致,错误码:10003

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码