原码,反码,补码,加法减法在计算机内存中的运算方法
什么是原码:所有数转化成二进制的序列就是原码【正数原反补相同】
什么是补码:原码通过取反得反码,反码+1得补码【负数存的是补码】
所有信息在计算机在内存中,都是由二进制方式存储
计算机自能进行加法运算
什么是原码,补码,反码呢?
他们之间是怎么相互转化的呢?
计算机是怎么实现5+3的?
计算机是怎么实现5-3的呢?
、、、
下面我们来详细讲解:
首先我们都知道
#include<stdio.h>
int main() {printf("%d\n", sizeof(char));//1printf("%d\n", sizeof(unsigned char));//1printf("%d\n", sizeof(int));//4printf("%d\n", sizeof(unsigned int));//4printf("%d\n", sizeof(float));//4printf("%d\n", sizeof(double));//8return 0;
}
每一个字节=8个比特位【例如01010101就是八个比特位】
正文
int a=3电脑把3存进整型a,是记录的3吗?
首先,电脑是通过二进制存储信息,所以必然不是3;
3转化为二进制:11
5转化为二进制:101
注意,存入大小为4个字节的a里面,a是32个比特位,11和101存入电脑变成了
3-> 00000000 00000000 00000000 00000011 原码
5-> 00000000 00000000 00000000 00000101 原码
也就是补零,补够32位
电脑存储3和5,存储的就是这两串二进制序列
那搞明白了3和5存储方式,那3+5在电脑中是怎么实现的呢?
可不是简简单单的3+5;
存什么,自然用什么加
3+5
00000000 00000000 00000000 00000011
+
00000000 00000000 00000000 00000101
=对应的位相加(满2进1)
00000000 00000000 00000000 00001000
00000000 00000000 00000000 00001000
方便点看=1000 ->8
3+3呢?
为了方便看,省略些零
00000011
+
00000011
=
00000110
那么负数呢?负数是怎呢存储的呢?
3
00000000 00000000 00000000 00000011
显然-3,需要一个东西表示符号即可
于是规定:进制的首进制位为符号位【1表示负,0表示正】
-3
10000000 00000000 00000000 00000011 原码
但电脑真就把这一串二进制的原码存进电脑里吗?
对于负数,电脑存的并不是其二进制的原码,而是二进制原码进行相关转化后得到的补码
怎么得到补码呢?
原码(除符号位,其余取反)-> 原码(加1)-> 补码
具体如下
-3原码 10000000 00000000 00000000 00000011
-3反码 111111111 111111111 111111111 111111100
-3补码 111111111 111111111 111111111 111111101
电脑存入负数的补码
电脑通过对其不同数字的补码进行运算,从而得出结果;【正数的原反补相同】
5-3=2
5的补码 00000000 00000000 00000000 00000101
+
-3的补码 111111111 111111111 111111111 111111101
=
2的补码:00000000 00000000 00000000 00000010
【本来是100000000 00000000 00000000 00000010】【前面突出的1截断掉】
又因为正数原=反=补
所以
2的原码00000000 00000000 00000000 00000010
翻译就是2
注意,计算机只能做加法
5-3是通过5+(-3)实现的
同理-3
原1000 0000 0000 0011【方便观看简单写】
反1111 1111 1111 1100
补1111 1111 1111 1101
…………………………………………………………………………………………………………
补1111 1111 1111 1101【原先是反码+1得补码,按理-1得反码,但是计算机只有加法】
反=
补1111 1111 1111 1101【-3的补码】
+
1111 1111 1111 1111 【-1的补码】不是简单的+(-1);对像是补码,自己也要化为补码
= 1111 1111 1111 1100 【例如111+111=11110】
取反
1000 0000 0000 0011【变回来了】
以上就是原码,反码,补码,加法减法在计算机内存中的运算方法
如有错误请纠正与讨论
原码,反码,补码,加法减法在计算机内存中的运算方法相关推荐
- Debug和release版本区别 原码反码补码的转换及存储
#define _CRT_SECURE_NO_WARNINGS 1 //Debug和release版本区别(VS2019版) //例子 #include<stdio.h> //int m ...
- 【软考学习2】数据表示——原码 反码 补码 移码
原码 反码 补码 移码是软考必考的项目,所以需要对其概念.计算方式和取值范围进行总结. 零.使用场景 原码 反码 补码 移码都是计算机中表示数据的方式,各有所长,对于我们来说,都需要加以学习. 软考中 ...
- 关于计算机中 原码, 反码, 补码 详解
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希 ...
- 计算机组成原理——基本组成 进制转化 奇偶校验 原码 反码 补码 移码 移位 原码补码乘法除法 IEEE754 加法器ALU
笔记来源于王道考研视频 第一章 通过电信号传递信息(低电平代表0,高电平代表1) 计算机系统 计算机系统=硬件+软件 软件 系统软件 应用软件 操作系统,数据库管理系统(DBMS),标准程序库(编程时 ...
- 计算机中的原码,计算机中的原码反码补码移码
计算机中的原码反码补码移码 原码 数值 X 的原码记为 [X]原,如果机器字长为 n (即采用 n 个二进制位表示数据),则最高位是符号位,0 表示正号,1 表示负号,基余的 n~1 位表示数值的绝对 ...
- 【计算机组成原理】原码 反码 补码 移码的转换
原码 反码 补码 移码的转换 这三种机器码都是二进制数据的表现形式,可以表现正数和负数. 原码是可以直接表现出数据的正负和大小. 正数的原码.反码和补码都是相同的. 反码用于原码和补码的转换的功能. ...
- 原码, 反码, 补码, 移码 详解
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希 ...
- 原码 反码 补码 详解
一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式, 叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放 ...
- python二进制反码例题_python中的进制转换和原码,反码,补码
python中的进制转换和原码,反码,补码 计算机文件大小单位 b = bit 位(比特) B = Byte 字节 1Byte = 8 bit #一个字节等于8位 可以简写成 1B = 8b 1KB ...
最新文章
- Oh My Zsh终端工具
- 使用osql.exe, 将Select的内容保存为文件
- Java客户端操作zookeeper:删除节点代码示例
- css中position的两种定位(absolute、relative)
- MS的完整形式是什么?
- 从数据库层面手动删除zabbix告警
- HTTP Status 500 - javax.servlet.ServletException: File [/head.jsp] not found
- 乔布斯首份手写求职信再次被拍卖
- React Native悬浮效果组件
- python聚类分析超市_Biopython聚类分析
- 如何在微信公众号优雅地添加代码
- grub引导删除双系统中的linux的正确姿势
- 反函数抽样(包括离散的)
- 单片机学习(三)8位数码管显示8个字符的程序及详解
- linux 下显示隐藏文件夹
- RCAN论文笔记:Image Super-Resolution Using Very Deep Residual Channel Attention Networks
- 鸡尾酒会算法 --- 公式
- 个推里群推php教程,GitHub - lyx2297999137/yii2-igetui: yii2个推
- Excel数据透视表、数据透视图
- Python和Matlab生成图片到visio的矢量图