[软考]之原码、反码、补码和移码

简介: [软考]之原码、反码、补码和移码

 开始备战软考已经一段时间了,这几天做了几套题,感觉很多细小的知识点自己掌握的还可以更牢靠,所以写博客理清一下自己的思维,这篇博客算是开端,先简单的介绍一下机器数的表示方法。


原码、反码、补码、移码的作用?


  在计算机内,机器数有无符号和带符号数之分。无符号数表示正数,在机器数中没有符号位。位于无符号数,若约定小数点的位置在机器数的最低位之后,则是纯整数;若约定小数点的位置在机器数的最高位之前,则是纯小数。对于带符号数,机器数的最高位是表示正、负的符号位,其余位则表示数值。若约定小数点的位置在机器数的最低数值位之后,则是纯整数;若约定小数点的位置在机器数的最高数值位之前(符号位之后),则是纯小数。


  为了便于运算,带符号位的机器数可采用原码、反码和补码等不同的编码方法,机器数的这些编码方法称为码制。


原码、反码、补码、移码如何表示?


  举例:[+45]原=00101101       -45=10101101 (以下所有例子都为这两个数的变换)


  原码:


  原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。


  举例:[+45]原=00101101       [-45]原=10101101


  反码: 反码是数值存储的一种,但是由于补码更能有效表现数字在计算机中的形式,所以多数计算机一般都不采用反码表示数。


  反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。


  举例:[+45]反=00101101       [-45]反=11010010


  补码:在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。


  反码表示法规定:正数的补码与其原码相同;一种简单的方式,符号位保持1不变,数值位从右边数第一个1及其右边的0保持不变,左边按位取反。也可以从反码推补码,就是在反码的基础上加1。


  举例:[+45]补=00101101       [-45]补=11010011


  移码:


  移码(又叫增码)是符号位取反的补码,一般用做浮点数的阶码,引入的目的是为了保证浮点数的机器零为全0。这个不分正负。


  举例:[+45]移=10101101       [-45]移=01010011


以上就是机器码的原码、反码、补码和移码的表示方法,其实这些表示方法都是为了让计算机的运算更加方便。


相关文章
|
Shell Linux
【Shell 命令集合 文件管理】Linux find命令使用教程
【Shell 命令集合 文件管理】Linux find命令使用教程
527 0
|
网络架构
静态路由配置实验(超详细讲解+详细命令行)
本文详细的介绍静态路由配置实验,内含详细的实例解析,该文你值得拥有。
|
4月前
|
存储 缓存 关系型数据库
我们来说一下 b+ 树与 b 树的区别
我是小假 期待与你的下一次相遇 ~
389 4
|
4月前
|
存储 缓存 安全
Java String 底层全解析:从字节码常量池到JVM极致优化的核心真相
Java中`String`是JVM优化最极致的类:依托不可变性,贯穿编译期常量折叠、运行时常量池复用、`invokedynamic`拼接、紧凑字符串、字符串去重等全链路优化,深度联动JIT、GC与类加载机制,堪称Java性能体系的集大成者。(239字)
408 6
在uni-app中使用element-ui
在uni-app中使用element-ui
1497 0
|
SQL JavaScript 关系型数据库
Sequelize操作MySQL基本用法1
Sequelize操作MySQL基本用法
|
机器学习/深度学习 人工智能 JavaScript
JavaScript和TypeScript的未来发展趋势及其在Web开发中的应用前景
本文探讨了JavaScript和TypeScript的未来发展趋势及其在Web开发中的应用前景。JavaScript将注重性能优化、跨平台开发、AI融合及WebAssembly整合;TypeScript则强调与框架整合、强类型检查、前端工程化及WebAssembly的深度结合。两者结合发展,特别是在Vue 3.0中完全采用TypeScript编写,预示着未来的Web开发将更加高效、可靠。
834 4
|
存储 Java
String 底层是如何实现的?
本文介绍了String类在Java中的底层实现,说明在JDK9之前String是基于`char[]`字符数组实现的,而JDK9及之后版本则使用`byte[]`字节数组实现,这种改变使得存储英文字符时空间效率提高,同时解释了字符串常量池的存储位置随JDK版本的演变。
603 0
String 底层是如何实现的?
|
编解码 编译器 C++
VS Code C/C++ MSVC编译器
VS Code C/C++ MSVC编译器
385 2
|
分布式计算 Hadoop Java
如何在Java中使用Hadoop
如何在Java中使用Hadoop