软考之路(4)—— 数据表示之原码、反码、补码
来源:互联网 发布:网络最火的游戏排行榜 编辑:程序博客网 时间:2024/05/21 07:09
在软考的必修科目中对于数据标识的认识少不了的,这部分的知识也是我们刚进入TGB时就需要学习的。下面我将这部分知识做个简单总结。
***************************************机器数&&真值**************************************
1、机器数
一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号,正数为0,负数为1。例如:
十进制
二进制
+3
00000011
-3
10000011
2、真值
带符号位的数值我们称为机器数的形式值,例如10000011。而机器数的形式值是不等于真正的数值的。例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3而不是形式值131(10000011转换成十进制等于131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。
例:
0000 0001的真值 = +000 0001 = +1
1000 0001的真值 =–000 0001 =–1
***************************************计算&&方法***************************************
机器存储一个具体数字的编码方式称为:原码, 反码, 补码。
1.原码
原码:符号位+真值的绝对值,最高位表示符号,其余位表示值.比如(8位二进制):
[+1]原 = 0000 0001
[-1]原 = 1000 0001
2.反码
反码:正数的反码是其本身;负数的反码是在其原码的基础上,符号位不变,其余各个位取反。
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
3.补码
补码:正数的补码就是其本身;负数的补码在其原码的基础上+1,符号位不变。
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
******************************************作&&用******************************************
我们知道计算机用三种编码方式表示一个正数,结果都是一样的,如下:
[+1] = [00000001]原 = [00000001]反 = [00000001]补
但是对于用三种编码方式表示一个负数,结果却完全不一样,如下:
[-1] = [10000001]原 = [11111110]反 = [11111111]补
原码是人脑能够直接识别并用于计算的表示方式,那么为何还会有反码和补码呢?
我们知道人脑是可以很容易的知道第一位是符号位的,因此在计算的时候我们会根据符号位,选择对真值区域的加减。但是对于计算机辨别"符号位"显然会让计算机的基础电路设计变得十分复杂!。于是人们想出了将符号位也参与运算的方法。
1.反码的作用:
如果用原码表示,让符号位也参与计算,显然对于减法来说,结果是不正确的。这也就是为何计算机内部不使用原码表示一个数。为了解决原码做减法的问题,出现了反码:
1.原码计算十进制的表达式:1-1=0
1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2(错误)
2.反码计算十进制的表达式:1-1=0
1 - 1 = 1 + (-1) = [00000001]反+ [1111 1110]反 = [1111 1111]反 = [1000 0000]原 =-0(正确)
2.补码的作用:
细心的人会发现上面用反码计算减法的结果为-0,对于+0和-0的理解,如果是人的话当然不会有什么错误,但是对于机器就不一样了。所以接下来我们要解决的的问题其实就是出现在"0"这个特殊的数值上.虽然人们理解上+0和-0是一样的,但是0带符号是没有任何意义的。而且会有[0000 0000]原和[1000 0000]原两个编码表示0。为了解决0的符号的问题以及两个编码的问题,出现了补码:
1-1 = 1 + (-1) = [0000 0001]补 + [1111 1111]补 = [00000000]补=[0000 0000]原
******************************************总&&结******************************************
反码用来解决机器做减法的问题;补码为了解决0的符号的问题以及两个编码的问题。
- 软考之路(4)—— 数据表示之原码、反码、补码
- [软考]之原码、反码、补码和移码
- 数据表示——原码、反码、补码、移码
- 整数表示—补码、原码、反码
- 软考——再看原码、反码、补码
- 【软考路上】——原码、反码、补码、移码
- 【软考】——原码、反码、补码、移码
- 【软考】原码、反码、补码、移码
- 【软考】原码, 反码, 补码 详解
- 软考:原码、反码、补码、移码
- [软考]原码 反码 补码
- 软考--原码、补码、反码
- 【软考】原码、反码、补码
- 【软考】(四)原码、反码、补码
- 数的二进制表示——原码、反码、补码
- 符号数表示—原码 反码 补码
- 原码反码补码表示
- C++菜鸟的成长之路(1)——浅谈原码、反码、补码
- Windows加壳防止破解工具Themida控件详细介绍及下载
- A*入门
- 开发指南专题十四:JEECG微云快速开发平台MiniDao 介绍
- android程序检测当前有无可用网络
- centos 安装 OpenSSL [资料整合]
- 软考之路(4)—— 数据表示之原码、反码、补码
- 最长公共子序列及Python实现
- 如何:对 Web 窗体使用路由(MSDN)
- Photoshop自动色阶调整原理
- C&C++编译过程
- Android 应用主题切换
- Linux上的free命令详解
- Android SDK Manager 下载缓慢解决办法
- Java 7 新的 try-with-resources 语句,自动资源释放