【入门】机器数和真值

机器数和真值

1、机器数

一个数在计算机中的二进制表示形式就是这个数的机器数。机器数是带符号的,在计算机用机器数的最高位存放符号,正数为0,负数为1。

比如,十进制中的数 +5 ,计算机字长为8位,转换成二进制就是0000 0101。如果是 -5,就是 1000 0101 。

那么,这里的 0000 0101 和 1000 0101 就是机器数。

2、机器数的真值

因为第一位是符号位,所以机器数的形式值就不等于真正的数值。

例如上面的符号数 1000 0101,其最高位1代表负,其真正数值是 -5,而不是形式值131(1000 0011转换成十进制等于133)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值

比如:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = -000 0001 = -1

二. 机器数的三种表示形式:原码、反码、补码

1. 原码

原码就是加了一位符号位的二进制数,正数符号位为0,负数符号位为1,符号位为最高位。 个人理解就是将真值里面的"+"转换为0,"-"转换为1。

| 十进制 | 真值 | 原码 | | :---: | :---: | :---: | | +2 | +000 0010 | 0000 0010 | | -2 | -000 0010 | 1000 0010 |

由此可以得出8位的二进制数的大小范围为[1111 1111, 0111 1111],也就是[-127, 127]对应java中byte数据类型的大小范围

2. 反码

正数的反码就是其原码,负数的反码则是符号位不变,其他位取反(0变1,1变0)

| 十进制 | 原码 | 反码 | | :---: | :---: | :---: | | +2 | 0000 0010 | 0000 0010 | | -2 | 1000 0010 | 1111 1101 |

3. 补码

正数的补码就是其原码,负数的补码则是反码+1

| 十进制 | 原码 | 反码 | 补码 | | :---: | :---: | :---: | :---: | | +2 | 0000 0010 | 0000 0010 | 0000 0010 | | -2 | 1000 0010 | 1111 1101 | 1111 1110 |

4. 为何使用反码、补码

使用原码进行计算的时候,对于人而言能够很轻易的辨别出符号位,然后直接对其他位数值进行计算。然而对于计算机的设计而言辨别出符号位就是一项非常复杂的工程,所以设计的时候就考虑让符号位直接参与计算,这样设计计算机就十分简单了。 对于加法而言符号位对于计算并没有影响,对于减法而言则考虑通过加上负数来转换为加法的方式进行计算。 如果通过原码来直接进行减法计算:

3 - 2 
= 3 + (-2)
= 0000 0011(原) + 1000 0010(原)
= 1000 0101
= -5

结果显而易见,如果通过原码来直接让符号位参与运算的话是不正确的,所以为了解决减法的问题引入了反码的概念。如果通过反码来进行减法计算:

3 - 2
 = 3 + (-2)   
 = 0000 0011(原) + 1000 0010(原)
 = 0000 0011(反) + 1111 1101(反)
 = 1 0000 0000(反) -- 最高位产生进位,结果+1
 = 0000 0001(反)
 = 0000 0001(原)
 = 1

结果正确,从上面例子看来如果通过反码进行减法运算的话是没有问题的,那为什么又需要补码呢,我们一起来看下面这个特殊的例子:

2 - 2
= 2 + (-2)
= 0000 0010(原) + 1000 0010(原)
= 0000 0010(反) + 1111 1101(反)
= 1111 1111(反)
= 1000 0000(原)
= -0

  0 + 0
= 0000 0000(原) + 0000 0000(原)
= 0000 0000(反) + 0000 0000(反)
= 0000 0000(反)
= 0000 0000(原)
= 0

由于对于0这个数字而言,正负号没有任何意义,但是经过计算却有可能出现[0000 0000]和[1000 0000]这两种不同的原码表示同一个数字0,这显然是不合理的,所以此时就引入了补码的概念。 如果通过补码来进行上述例子的计算:

2 - 2
= 2 + (-2)
= 0000 0010(原) + 1000 0010(原)
= 0000 0010(反) + 1111 1101(反)
= 0000 0010(补) + 1111 1110(补)
= 1 0000 0000(补) -- 最高位产生进位,进位舍弃
= 0000 0000(补)
= 0000 0000(反)
= 0000 0000(原)
= 0

  0 + 0
= 0000 0000(原) + 0000 0000(原)
= 0000 0000(反) + 0000 0000(反)
= 0000 0000(补) + 0000 0000(补)
= 0000 0000(反)
= 0000 0000(原)
= 0

由上述例子可以看出,补码完美的解决了0的符号问题以及0有两个不同原码表示的问题。而且[10000 0000]也可以用来表示-128:

-1 - 127
= -1 + (-127)
= 1000 0001(原) + 1111 1111(原)
= 1111 1110(反) + 1000 0000(反)
= 1111 1111(补) + 1000 0001(补)
= 1 1000 0000(补) --最高位产生进位,进位舍弃
= 1000 0000(补)

-1 - 127的结果为-128,上面例子中-1和-127补码相加后得出的补码也是-128。但是这个1000 0000(补)实际上对应的是之前的-0,所以这个补码是没有反码和原码的。 综上可以看出使用补码的话不仅0的符号问题和多原码问题可以解决,还可以多表示一个最小数。因此对于1字节而言,原码和反码的范围是[-127, 127],而补码的范围是[-128, 127],也可以解释java中int的范围是[-2, 2-1]。

转载自:机器数、真值、原码、反码和补码 - 知乎 (zhihu.com)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 要将16进制机器转换为真值,可以按照以下步骤进行: 1. 将16进制机器转换为二进制机器。 2. 如果二进制机器的最高位是1,则表示这个是负,需要进行补码表示。 3. 对于非负,直接将二进制机器转换为十进制即为真值。 4. 对于负,需要进行补码还原,即将二进制机器的所有位取反,然后加1。得到的结果即为该负真值,且符号为负。 例如,对于16进制机器0xA5,可以将其转换为二进制机器10100101。由于最高位是1,因此表示的是一个负。对其进行补码还原,得到的二进制为01011011,其真值为-75。 ### 回答2: 16进制是一种计系统,它包含0到9的字和A到F的字母。在16进制中,每个字或字母的权值是16的一个幂次,从右到左依次是16^0,16^1,16^2,16^3...以此类推。 在计算机中,16进制常用于表示二进制,每4个二进制位对应一个16进制位。例如,二进制1100可以表示为16进制C。 转换16进制机器真值的过程如下: 1. 将16进制每个字转换为4位的2进制。 2. 将每个2进制位按权值相加。 举个例子: 假设有16进制为3A5,要将其转换为真值。 3对应的2进制是0011, A对应的2进制是1010, 5对应的2进制是0101。 将每个2进制位按权值相加: 0011(3) * 16^2 + 1010(A) * 16^1 + 0101(5) * 16^0 = 3 * 16^2 + 10 * 16^1 + 5 * 16^0 计算得到真值为: 3 * 16^2 + 10 * 16^1 + 5 * 16^0 = 3 * 256 + 10 * 16 + 5 * 1 = 768 + 160 + 5 = 933。 所以,16进制3A5对应的真值是933。 ### 回答3: 16进制是一种表示字的进制系统,它使用0-9和A-F共16个符号来表示。16进制机器是使用16进制表示的计算机中的值。 16进制机器真值之间的转换可以通过将16进制转换为10进制来完成。每个16进制位的位置分别对应2的幂,并且将每个位上的值乘以相应的权值,然后将所有这些乘积相加即可得到真值。 以16进制A3为例,A代表10,3代表3,我们可以将A和3转换为10进制,A对应的10进制为10,3对应的10进制为3。然后按照权值进行计算,A3的真值等于10×16^1 + 3×16^0 = 160 + 3 = 163。 因此,16进制机器A3对应的真值为163。换句话说,A3在计算机中表示的值为163。同样的道理,其他的16进制机器也可以通过将其转换为10进制来得到对应的真值

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值