用c#语言解释二进制源码和补码

更新时间:2023-07-26 19:30:41 阅读: 评论:0

⽤c#语⾔解释⼆进制源码和补码
⼆进制
我们知道,计算机最终处理的都是0和1的⼆进制的数据,⼆进制⼜分为有符号数和⽆符号数,今天就带你们详细了解⼀下。我会以代码为例⼦让各位更清晰的明⽩,所⽤语⾔为C#语⾔。shotacon
⽆符号数
所谓⽆符号数就是没有符号的数,数有正负之分,但是只有负数的时候才会有符号,所以⽆符号数就是正数。
cbhd⽆符号数不⽤考虑正负,所以数中的每个⼆进制数都是⽤来表⽰数值的。
下⾯请看代码:
UInt16 decimals =2767;
去度假string binary = Convert.ToString(decimals,2);
Respon.Write("Data:<span>"+ binary +"</span><br/>");
Respon.Write("Length:"+binary.Length);
⾸先我定义⼀个了⼀个16位⽆符号整数的变量decimals,赋值为2767,然后转成⼆进制形式,并打印了出来,结果如下:
这⾥⼤家应该都看得懂,2767这个⼗进制转成⼆进制就是上述图⽚中的⼆进制数字。
有符号数
所谓有符号数就是有正负的数,可以是负数了,所以在⼆进制的数字中,我们就拿最⾼位的数字⽤来表⽰正负,0表⽰正,1表⽰负。
下⾯请看代码:
Int16 decimals =2767;
粘滞性
安微省string binary = Convert.ToString(decimals,2);
Respon.Write("Data:<span>"+ binary +"</span><br/>");
Respon.Write("Length:"+binary.Length);
这跟上述的唯⼀区别就是这次我定义的是有符号的16位整数,然后我们接着来输出看看结果。
从表⾯上看是⼀样的,实质上是不⼀样的,第⼀个是⽆符号整数,输出的是源码,第⼆个我们有符号整数,输出的补码。但是由于正数的源码和补码是⼀样,所以我们看到的是⼀样的。
这⾥C#语⾔给我们省略了4个0,实际上完整的Data应该是:0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1。
最⾼位就是符号位为0,就是正数。
负数的情况
Int16 decimals =-3;
string binary = Convert.ToString(decimals,2);
抗击疫情标语
Respon.Write("Data:<span>"+ binary +"</span><br/>");
Respon.Write("Length:"+binary.Length);
这⾥,输出的补码,源码转补码的步骤是:⾸先是求出3的源码是:1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
然后把这个源码全部取反,0变1,1变0,符号位不变,变成:1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0,然后在加1得到:1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1得到补码。
说到这⾥,那补码有什么⽤呢?
空旷的近义词补码是在源码的基础上取反加1,那么想想,⽐如3-2,就可以改为3+(2的补码),这样就把减法变为了加法,在计算机(cpu)中,是没有减法器,只有加法器,所以补码的存在最⼤的作⽤可以把减法变为加法。
这⾥我们四位来模拟演⽰:
⾸先求出3的源码为:0011 然后求出2的补码为:1110
然后0011+1110等于0001,0001转为10进制就为1,这样就把减法转为了加法。
鼻子大的好处
这⾥加法可能⼤家会求出10001,前⾯那个1是符号位的进位,需舍去。
注意,最后求得的0001是补码的形式,由于最⾼位是0,所以是正数,正数的原码和补码是⼀样的,所以不⽤转换为原码。
如果得到的结果最⾼位是1,那么就是负数,这时候就需要把补码转为原码才能得到结果。

本文发布于:2023-07-26 19:30:41,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1097751.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:符号   补码   源码   进制   加法   转为   输出   原码
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图