目录
1.机器数
2.真值
3.原码
4.反码
5.补码
6.使用原码, 反码和补码的历程
首页 常见问题 机器数是原码还是补码

机器数是原码还是补码

Nov 18, 2022 pm 02:22 PM
机器数

机器数既是原码,也是补码。在计算机中表示的带符号的二进制数称为机器数,机器数包含原码、反码和补码三种表示形式。原码就是加了一位符号位的二进制数,正数符号位为0,负数符号位为1,符号位为最高位;正数的反码就是其原码,负数的反码则是符号位不变,其他位取反;正数的补码就是其原码,负数的补码则是反码+1。

机器数是原码还是补码

本教程操作环境:windows7系统、Dell G3电脑。

1.机器数


通过了解机器数后发现:机器数包含了“源码”,“反码”,“补码”的表示形式;

因为机器数指的是一个数在计算机里以二进制表示的形式,机器数的首位是符号位,正数的符号位为“0”,负数的符号位为“1”。

例如:5 的机器数是:00000101

          -5的机器数是:10000101 (以8位二进制为例)

 而 “源码”,“反码”,“补码”具有同样的表示形式,接下来会具体介绍它们的关系。

2.真值


真值指的是带符号位的机器数对应的真实数值。

对于真值而言,一般用十进制表示,也可以用二进制表示,很少用其他进制表示真值。

例如:10000101 的真值= -0000101 = -5

           00000101 的真值= +0000101 =+5

3.原码

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

原码的表示形式就是第一位是符号位加上真值的绝对值。

例如:-000101(真值)= 10000101(原码)

          00000101(真值)= 00000101(原码)

因为第一位是符号位,所以原码在8位二进制的范围为:

11111111~01111111  即    -127~127

原码是最容易被大脑理解,计算的表示形式。

4.反码

正数的补码反码是其本身;正数的反码就是其原码,负数的反码则是符号位不变,其他位取反(0变1,1变0)负数的反码是符号位保持不变,其余位取反。

反码就是在原码的基础上,如果是正数,就和原码一样,如果是负数,首位符号不变,其余数值取反。

例如:00000101(原码)=  00000101(反码)

          10000101(原码)=  11111010 (反码)

反码不容易被大脑理解,通常被转换成原码后计算。

5.补码

补码是在原码的基础上,如果是正数,就和原码一样,如果是负数,除首位符号外,其余数值取反(反码),在它的基础上 +1。

例如:00000101(原码)=  00000101(反码)=  00000101(补码)

          10000101(原码)=  11111010 (反码)=  10000011(补码)

对于负数, 补码表示方式也是人脑无法直观看出其数值的,通常也需要转换成原码再计算其数值。

6.使用原码, 反码和补码的历程


只使用原码容易被理解,但是对于计算机而言要辨别首位正负,要消耗大量资源,于是人们寻找到了利用符号位参与运算的方法。

我们知道, 根据运算法则减去一个正数等于加上一个负数, 即: 1-1 = 1 + (-1) = 0 , 所以机器可以只有加法而没有减法, 这样计算机运算的设计就更简单了。

探索计划1.0(原码):

1+ (-1) = 0

00000001(原码)+10000001(原码)=10000010(原码)= -2

探索原码计算首位计划失败

追加投资!

探索计划2.0版本出世(反码):

00000001(原码)+10000001(原码)= 00000001(反码)+11111110(反码)= 11111111(反码)=10000000(原码)= -0

更新说明:解决了首位符号参与运算的问题,很大程度上减少计算机对二进制运算所消耗的资源,但是出现“0”和“-0”重复的情况,还可以改进!

探索计划3.0版本出世(补码):

00000001(原码)+10000001(原码)= 00000001(反码)+11111110(反码)= 00000001(补码)+11111111(补码)=00000000(补码)=00000000(原码)= 0

追加:(-1)+(-127)= (-128)

10000001(原码)+11111111(原码)= 11111110(反码)+10000000(反码)= 11111111(补码)+10000001(补码)=10000000(补码)=-128

更新说明:解决了2.0版本存在的一个无意义的二进制“-0”,对二进制范围进一步扩大由1.0版本的(-127~127)升级为(-128~127)同理也可以用于其他位的二进制

例如:int有4个字节32位,表示的范围为(-2^31~2^31-1)

由于3.0版本更符合环保理念,所以作为计算机储存二进制的不二之选。

更多相关知识,请访问常见问题栏目!

以上是机器数是原码还是补码的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)