hello,这里是X,真的好久没有出博客啦,最近忙成狗了,今天总结一个计算机运算方法中非常基础的几个概念,对这几个概念还不了解的朋友别忘了收藏噢🤟🤟🤟
无符号数
在计算机当中,所有的数都保存在寄存器当中,并且在这里我们还牵扯到“机器字长”这个概念(机器字长:CPU一次处理数据的位数,像常见的有32位、64位),那么无符号数就是没有符号的数,在寄存器当中每一位均可用来存放数值
有符号数
有符号数,即带有符号的数,对于这类数而言,符号的“正”和“负”机器是无法识别的,但是为什么要定义这类数,因为“正”和“负”对应两种不同的状态,这样符号也被数学化了,符号位一般放在有效数字前面
在这里区分一下“有符号数”和“真值”的概念:
有符号数就是把符号“数字化”的数,比如上面的图,我们让0代表正、1代表负,这就是“数字化”的概念
真值:就是带有+和-符号的数值,就比如上面的左边部分
一旦符号数字化,那么就形成了一种新的编码
原码表示法
原码表示法是最简单的一种机器数的表示方法,符号位为0表示正数、1表示负数,在这里区分一下整数和小数
原码和真值之间的转换
步骤如下:
1、看符号位确定正负
2、看符号位后面是“.”还是“,”,以此确定小数还是整数
3、出结果
这里要说明一个问题,那就是“0”的问题,“+0”和“-0”的问题,后续也会说到
比如:求解x = 0的原码
在这里如果说x = +0的话,那么+0.0000 = 0.0000
如果x = -0的话,那么-0.0000 = 1.0000
相同的,对于整数来说也是一样,[+0]不等于[-0]
补码表示法
讲到补码这个概念,在这之前我是有点不太理解的,就是我懂得怎么去计算,但是具体来说这个到底是怎么来的,有什么意义,我没有深究过,直到今天。
在这里大家设想一个场景,就是假设现在这里有一个时钟,时钟现在指向6点🕕,我想要时钟指向3点🕒,我该怎么做?
💭💭💭有两个办法
1、逆时针转动3格------>还是3点
2、顺时钟转动9格----->相当于15点
那么现在假设顺时钟为正,逆时针为负,那么可以得到:
6-3=3 ➖➖➖➖➖➖➖➖➖➖➖ 6+9=15
虽然这两个式子看起来很简单,但是在这里我们讨论的方向就不一样了,时钟是12小时的,这个“12”在时钟里不会被显示,所以15-12=3,所以15和3都显示3点,这样-3和+9对时钟而言效果是一样的,那么在数学上,我们称12为“模”,记为mod 12,而+9是-3以12为模的补数,记为:
所以,只要确定了“模”,就可以找到一个与负数等价的正数,来代替这个负数,以下有一些结论:
案例
正数的补数是他本身
原码求补码——定义方法
整数
求补码是有很多方法的,你可以用它的定义来做,但是相对来说比较麻烦一些
小数
快捷方法
正数就不说啦,只讨论负数:
当真值为负数时,补码可以用原码除符号位外每位取反加一求得
补码转换原码
求法用定义的话,就是上面的方法,就不说了,这里也是直接介绍快捷方法💚
当真值为负数时,原码可以用补码除符号位外每位取反加一求得
是不是很神奇~
举例
反码表示法
原码全部取反即可得到反码已知反码求补码
如果已知一个数的反码,可以将反码先转换成原码,再求得补码
总结
+0和-0反码、补码、原码总结
在这里区别它们的区别是要用定义去算的,我直接给结论: