原码、反码、补码概念及转换
文章目录
- 基础概念
- 原码
- 反码
- 补码
- 三种编码方式存在的原因
基础概念
- 数据在计算机内部是以补码的形式存储
- 数据分为有符号数和无符号数
- 无符号数为正数,有符号数为负数,计算机内部是以补码的形式存储的
- 正数的首位地址为0,其原码是由十进制数转换为二进制数
- 负数的首位地址为1,其原码是由十进制数转换为二进制数,然后将首位地址改为1
- 对于一个数,计算机要使用一定的编码方式进行存储,原码、反码、补码是机器存储一个具体数字的编码方式,原码、反码、补码是计算机原理的术语。说白了就是为了理解计算机使用二进制进行运算的原理。对于C/C++来说,是和数据类型有关的
原码
原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值
正数: 10 的原码 --> 0000 0000 0000 0000 0000 0000 0000 1010
负数:-10 的原码 --> 1000 0000 0000 0000 0000 0000 0000 1010
注意: 二进制位的首位标识该二进制数是一个正数还是负数,正数为0,负数为1
反码
- 正数的反码 == 原码
- 负数的反码是在其原码的基础上,符号位(首位)不变,其余各个位取反
正数: 10 的原码 --> 0000 0000 0000 0000 0000 0000 0000 1010
负数:-10 的原码 --> 1000 0000 0000 0000 0000 0000 0000 1010正数: 10 的反码 --> 0000 0000 0000 0000 0000 0000 0000 1010
负数:-10 的反码 --> 1111 1111 1111 1111 1111 1111 1111 0101
补码
- 正数的补码 == 原码
- 负数的补码是在其反码的基础上加1
正数: 10 的原码 --> 0000 0000 0000 0000 0000 0000 0000 1010
负数:-10 的原码 --> 1000 0000 0000 0000 0000 0000 0000 1010正数: 10 的反码 --> 0000 0000 0000 0000 0000 0000 0000 1010
负数:-10 的反码 --> 1111 1111 1111 1111 1111 1111 1111 0101正数: 10 的补码 --> 0000 0000 0000 0000 0000 0000 0000 1010
负数:-10 的补码 --> 1111 1111 1111 1111 1111 1111 1111 0110
三种编码方式存在的原因
计算机只会做加法计算
当两个正数之间使用原码进行运算就可以解决
// 由于计算机只会做加法运算,减法运算在计算机的表现形式为
10 + 1使用原码进行计算如下:
10 转成原码 --> 0000 0000 0000 0000 0000 0000 0000 1010
1 转成原码 --> 0000 0000 0000 0000 0000 0000 0000 0001
两者相加 --> 0000 0000 0000 0000 0000 0000 0000 1011 // 该原码转成十进制为 11
当正数和负数使用原码运算的时候就会出现问题
// 由于计算机只会做加法运算,减法运算在计算机的表现形式为
10 - 1 == 10 + (-1) // 后者为计算机的表现形式使用原码进行计算如下:
10 转成原码 --> 0000 0000 0000 0000 0000 0000 0000 1010
-1 转成原码 --> 1000 0000 0000 0000 0000 0000 0000 0001
两张相加 --> 1000 0000 0000 0000 0000 0000 0000 1011 // 该原码转成十进制为 -11
因为正数和负数之间使用原码运算会出现问题,为了解决这个问题,反码就出现了
// 使用反码进行计算
10 - 1 == 10 + (-1) // 后者为计算机的表现形式使用原码进行计算如下:
10 转成原码 --> 0000 0000 0000 0000 0000 0000 0000 1010 --> 转成反码 --> 0000 0000 0000 0000 0000 0000 0000 1010
-1 转成原码 --> 1000 0000 0000 0000 0000 0000 0000 0001 --> 转成反码 --> 1111 1111 1111 1111 1111 1111 1111 1110
10 转成反码 --> 0000 0000 0000 0000 0000 0000 0000 1010
-1 转成反码 --> 1111 1111 1111 1111 1111 1111 1111 1110
两者反码相加 --> 1 0000 0000 0000 0000 0000 0000 0000 1000 // 左侧超出的部分会被自动去掉,该原码转成十进制为 8注意:反码在进行正数与负数之间的运算所得的值会相差1
由于反码在进行正数与负数之间的运算所得的值会相差1,为了解决这个问题,补码就出现了
10 转成补码 --> 0000 0000 0000 0000 0000 0000 0000 1010
-1 转成补码 --> 1111 1111 1111 1111 1111 1111 1111 1111
两者补码相加 --> 1 0000 0000 0000 0000 0000 0000 0000 1001 // 左侧超出的部分会被自动去掉,该原码转成十进制为 9
原码、反码、补码概念及转换相关推荐
- 【计算机组成原理】原码 反码 补码 移码的转换
原码 反码 补码 移码的转换 这三种机器码都是二进制数据的表现形式,可以表现正数和负数. 原码是可以直接表现出数据的正负和大小. 正数的原码.反码和补码都是相同的. 反码用于原码和补码的转换的功能. ...
- 原码反码补码之间运算转换
1. 正数的原码=反码=补码 2. 负数的反码=在其原码的基础上, 符号位不变,其余各个位取反 负数的补码=在反码的基础上+1 负数的补码=在原码的基础上, 符号位不变, 其余各位取反, 最后末位+ ...
- 051_原码反码补码概念
1. 反码的范围 1.1. 反码表示法规定: 正数的反码与其原码相同.负数的反码是对其原码逐位取反, 但符号位除外. 1.2. 在规定中, 8位二进制码能表示的反码范围是-127~127. 1.3. ...
- 原码反码补码以及左移右移无符号左移右移。
一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式, 叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符 ...
- python二进制反码例题_python中的进制转换和原码,反码,补码
python中的进制转换和原码,反码,补码 计算机文件大小单位 b = bit 位(比特) B = Byte 字节 1Byte = 8 bit #一个字节等于8位 可以简写成 1B = 8b 1KB ...
- 【原码, 反码, 补码的基础概念和计算方法】
数值在计算机中是以补码的方式存储的,在探求为何计算机要使用补码之前, 让我们先了解原码, 反码和补码的概念. 原码就是符号位加上数字的二进制表示, 即用第一位表示符号, 其余位表示值. 反码的表示方法 ...
- 数制和码制(数制的转换的方法,BCD码<8421,2421,5421,余三码>,格雷码,原码,反码,补码,定点数和浮点数)
目录 1.数制的转换 1)二,八,十六进制进制转十进制 加权系数求和法 2)十进制转二,八,十六进制 除基取余法(短除法) 减权定位法 3)二,八,十六进制的相互转换 2.BCD码 3.格雷码 4.原 ...
- day017:Java进制转换、原码反码补码、位运算、位移运算符
一.进制介绍: 1.进制:指进位制,表示某一位置上的数,运算时是逢X进一. 十进制就是逢十进一,二进制就是逢二进一,八进制就是逢八进一. 2.Java中默认的数值都是十进制,如果要输入其他进制,在数值 ...
- 原码反码补码的概念,以及原码反码的表示形式
本文主要讲解计算机的原码, 反码和补码.的概念,以及原码反码的表示形式,以及原码反码补码之前如何相互转换,还有计算机中数字是怎么样存储的. 原码: 假设机器字长为n,原码(自然二进制码)是一种计算机中 ...
- 原码 反码 补码 之间在小数正数间的转换
原码 反码 补码 之间在小数正数间的转换 基本转换 对于正数 原码等于反码等于补码(小数也一样) 对于负数 原码除了符号位取反即反码 反码基础之上+1即补码 但是在遇到某些题时候还是会混淆,比如三者在 ...
最新文章
- pjax 历史管理 jQuery.History.js
- Memcached 客户端使用
- 【LeetCode】130.被围绕的区域
- CVPR 2019 | 基于可解释性以及细粒度的可视化解释卷积神经网络
- 计算机基础知识PDF文档,计算机基础知识(范文).pdf
- Keepalived实战(3)
- 23种Python设计模式之建造者模式详解
- matlab如何实现连续函数傅里叶变换和反变换(注:其实是由符号法创建的函数)
- 趣味小游戏——井字棋
- Web前端知识点总结(持续更新中...)
- 【立创EDA开源推荐】10期基于PCB彩印教程(水转印)
- Java基础视频教程(2020年最新)
- macos复制粘贴快捷键 快速_MacOS中复制和粘贴快捷键说明,及常见的各种快捷键整理大全...
- 计算机网络覆盖的地理范围分类,计算机网络按地理范围可分为什么
- oracle apex global,Oracle Apex 实用笔记系列 1 - Oracle Apex 调试技巧
- uva 10859 放置街灯树形dp
- python爬虫基础Ⅱ——Ajax数据爬取、带参请求:QQ音乐歌单、QQ音乐评论
- TIA博途V17中如何创建和使用VoT应用程序_Web功能
- 史上最小 x86 Linux 模拟器「GitHub 热点速览 v.22.50」
- 【蓝桥杯练习】100的阶乘有多少个约数?