【软考】——机器数及其运算

版权声明:未经过博主同意,不得随意转发 https://blog.csdn.net/weixin_40918067/article/details/81570495

机器数和真值的概念:

          机器数:一个数在计算机中的二进制表示形式;

          真值:带符号位的机器数对应的真正数值(十进制的数)称为真值;

          原码:符号位+真值的绝对值(二进制);

  1. 原码、反码、补码和移码其实是机器数的编码方法,并被称为码制;而机器数有两种类型:无符号数、带符号数;
  2. 无符号数表示正数;而整数有分为两种类型:一种是纯整数,另一种是纯小数;(纯整数:约定小数点的位置在机器数的最低位之后;纯小数:约定小数点的位置在机器数的最高位之前之前)
  3. 带符号数有正负之分:其(机器数)最高位是表示正、负的符号位,其余位则表示数值;

原码的例子???——》

[ +1 ] = 0 0000001,[ -1 ] = 1 0000001;

注意:

  1. 最高位是符号位,0表示正号,1表示负号,其余的n-1位表示数值的绝对值;
  2. 第一位是符号位,其影响二进制的取值范围;

反码的例子???——》

[ +1 ] = 0 0000001,[ -1 ] = 1 1111110;

注意:

正数???——》反码与原码相同,负数的反码则是其绝对值按位求反;

负数???——》反码是在其原码的基础上,符号位不变,其余各个位取反;

【例子】

在这里,我提示下各位,要看出反码的十进制数值,就要把它还原会原码才可以计算得出;

补码的例子:

[ +1 ] = 1 0000001;[ -1 ] = 0 1111111;

注意:

1、正数的补码与其原码和反码相同,负数的补码则等于其反码的末位加1;(特例:[ +0 ] = 0 0000000;[ -0 ] = 0 0000000)

2、负数的补码也就是在其原码的基础上,符号位不变,其余各位取反(0:正,1:负),最后+1;

【例子】

【软考知识】

1、最适合进行数字加减运算的数字编码是补码;???——》CPU只设置硬件加法器;???——》只有补码能够将减法转化为加法;

2、最合适表示浮点数阶码的数字编码是移码;???——》被广泛用来表示浮点数阶码的数字编码;???——》用比较阶码的大小来实现真值大小的比较;

对原码、反码、补码的使用进一步的了解???——》

         一般我们对加减乘除运算从小学开始学会后,就一直以为计算就该这么算;但是你要知道,计算机不是人,它只会逻辑;所以加减乘除这相对人类而言是最基础的运算,但对计算机而言,因为计算机只会辨认"符号位(正负)",所以用二进制来表示加、减这两种运算方式,会使计算机的基础电路设计变得十分复杂;于是人们就想出了将符号位也参与运算的方式;首先我们都知道:1-1=0,但是我们很少会这么写:1+(-1)=0;但是这样机器运算就可以只有加法而没有了减法,从而机器数的运算方式设计变得简单啦!

现在就来个原码栗子吧!让大家了解的更深刻一点哈!

唉!怎么1+(-1)=-2,这也就是为什么还要反码等其他码;

为了解决这个原码做减法这个问题,就设计了一个反码原理,再来一颗栗子(反码)

         通过上面那个例子,大家对原码和反码多点了解吗?其实反码还有一个问题,那就是“0”这个特殊的数值;虽然大家对+0和-0的理解上是一样的,但是上面的0带符号不是就没有意义啦,而且[ 0000 0000]和[ 1000 0000]两个编码都表示0的意思;

         于是补码这个原理就来了,还是和上面一样,先来个栗子:

         上面的栗子用了[0000 0000]表示0,而以前出现-0的奇特数值,就没有啦!并且可以用[1000 0000]表示-128;

     补码的出现,解决了0的符号以及两个编码的问题,而且还能够多表示一个最低数;

        这就是为什么是8位的二进制,使用原码或反码表示的范围:[ -127,+127 ],而使用补码表示的范围为[ -128,,127];

因为机器使用补码,对于编码中常用到的32位int类型,可以表示的范围是:[-2^31,2^31-1],因为第一位表示的是符号位,而使用补码表示时又可以多保存一个最小值;

更深入的了解???——》

将减法变成加法,这背后究竟蕴含了怎么的数学原理呢?

首先将钟表想象成是一个1位的12进制;如果当前时间是6点,而我希望的是将时间设置成4点,那我们需要怎么做呢?

解决方式有:

     1、往回拨2个小时:6-2=4;

     2、往前拨10个小时:(6+10)mod  12 = 4;

     3、往前拨10+12=22个小时:(6+22)mod  12 = 4;

     2,3方法中的mod是指取模操作,16  mod  12 = 4,即用16除以12的余数是4;从这3个方法中我们可以看到出,钟表往回拨(减法)的结果可以用往前拨(加法)代替;

     现在的焦点就是落在了如何用一个正数来代替一个负数;通过上面的解决方式,我们可以感觉到一些规律,但是数学可是用逻辑来计算的,不能凭着个人的感觉来;

现在,我就来给大家来介绍下同余和负数取模的概念

同余概念:两个整数a,b;若它们除以整数m所得的余数相等,则称a,b对于模m同余;

负数取模:

mod运算的数学定义:clip_image001

公式的意思:x mod y等于x减去y乘上x与y的商的下界

再来一个栗子,今天可吃了不少栗子~哦!

 -3 mod 2

=  -3 -2*

那接下来就求证一下有关钟表的问题啦!

大家给个赞,就是给我最大的鼓励!!!

注意:“赞”位于右上角;

猜你喜欢

转载自blog.csdn.net/weixin_40918067/article/details/81570495