原码、反码和补码详细集合

目录

一.什么是原码,反码,补码?

[1).原码(true form):](#1).原码(true form):)

2).反码:

3).补码:

二.为什么要有原码,反码,补码


一.什么是原码,反码,补码?

1).原码(true form):

原码是计算机中对数字的一种二进制定点表示方法。

在原码中,取最高位用做符号位(0表示正,1表示负)其余位表示数值大小(该数真值的绝对值)。

整数:原码即其二进制。

小数:将小数部分不停乘2,每次取其整数部分,直到该数没有小数为止,每次取出的整数加起来 即使小数部分的二进制,即小数的原码。

示例:

|-----|-----------|---------------------|
| 11 | 16个二进制位表示 | 0000 0000 0000 1011 |
| 11 | 8个二进制位表示 | 0000 1011 |
| -11 | 16个二进制位表示 | 1000 0000 0000 1011 |
| -11 | 8个二进制位表示 | 1000 1011 |

|------|----------|--------------|
| 0.5 | 8个二进制位表示 | 0000 0000. 1 |
| -0.5 | 8个二进制位表示 | 1000 0000. 1 |

由此我们可以得到:

原码的优点: 简单直观。

原码的缺点: 原码不能直接参与计算,会出错误

2).反码:

反码是数值存储的一种,多应用于系统环境设置(如linux平台的目录和文件的默认权限的设置)。

也常用作 原码求补码 或 补码求原码 的过度码。

正数: 原码与反码相同。

负数: 原码符号位除外,其他位按位取反。

示例:

|------|----------|-------------|
| 11 | 8个二进制位表示 | 0000 1011 |
| -11 | 8个二进制位表示 | 1111 0100 |
| 0.5 | 8个二进制位表示 | 0000 0000.1 |
| -0.5 | 8个二进制位表示 | 1111 1111.0 |

由此我们可以看出:

反码的有点:加减法运算规则简单,只需对应位相加并进位即可。

反码的缺单:当 0 和 -0存在不同的值。

3).补码:

补码是计算机把减法运算转化为加法运算的关键编码。

正整数: 补码和原码、反码相同。

负整数: 补码等于负整数的反码加一。

正小数:补码与原码、反码相同。

负小数:补码 . 后的值加1.

示例:

|-------|----------|--------------|
| 11 | 8个二进制位表示 | 0000 1011 |
| -11 | 8个二进制位表示 | 1111 0101 |
| 0.25 | 8个二进制位表示 | 0000 0000.01 |
| -0.25 | 8个二进制位表示 | 1111 1111.11 |

二.为什么要有原码,反码,补码

由于二进制对于计算机的硬件来说,更容易实现(只有两种状态),并且有利于提高运算速度以及适应逻辑运算(真和假两种状态),所以使用二进制的形式进行存储和运算数据。

我们知道,一台计算机由运算器、控制器、存储器、输入和输出设备组成,但是其中运算器只有加法运算器,没有减法运算器。即计算机只能进行加法运算,为了实现数据的减法运算,就引入了反码的概念。但是使用反码计算时,结果的真值部分是正确的。问题其实就出现在"0"这个特殊的数值上。 虽然人们理解上+0和-0是一样的, 但是0带符号是没有任何意义的。 而且会有0000 0000原和1000 0000原两个编码表示0。于是,补码就出现了,修复了0的符号以及存在两个编码的问题, 而且还能够多表示一个最低数(从八进制整型来说,范围从(-127,127)到(-128 ,127))。

相关推荐
殷色玫瑰6 分钟前
C++ STL:stack、queue、priority_queue 与容器适配器详解
java·开发语言·数据结构·c++·算法·visualstudio
Hi2024021710 分钟前
同一个 NMS 算子,两种语言实现:CUDA C 与 Rust 生成 LLVM IR 和 Vortex 汇编的差异
c语言·汇编·rust·gpgpu·vortex·cudac
IT方大同17 分钟前
java输入输出+方法
java·开发语言·python
滕州市燕猫虎计算机科技工作室个体工商户18 分钟前
《Rust程序设计》学习笔记一
开发语言·rust·学习笔记·rust程序设计
Wang's Blog43 分钟前
Java框架 SpringCloud 快速入门: 服务拆分之服务远程调用
java·开发语言·spring cloud
努力努力再努力wz44 分钟前
【CUDA入门系列】CUDA编程实战:设备选择、显存管理、Kernel、Stream 与 Event 全流程梳理
开发语言·c++
lhbweilai1 小时前
深挖FreeRTOS内核实现(二)
c语言·汇编·stm32·单片机
杨丰玮4181 小时前
C语言核心语法
java·c语言·开发语言·学习方法
ttwuai1 小时前
Go开源后台管理系统推荐:README、源码和License应该怎么验
开发语言·golang·开源
Java后端的Ai之路1 小时前
Python 进阶探索30 - Python中的装饰器
开发语言·人工智能·python·文件处理·装饰器模式