原码,反码,补码,加法减法在计算机内存中的运算方法

什么是原码:所有数转化成二进制的序列就是原码【正数原反补相同】

什么是补码:原码通过取反得反码,反码+1得补码【负数存的是补码】

所有信息在计算机在内存中,都是由二进制方式存储

计算机自能进行加法运算

什么是原码,补码,反码呢?

他们之间是怎么相互转化的呢?

计算机是怎么实现5+3的?

计算机是怎么实现5-3的呢?

、、、

下面我们来详细讲解:

首先我们都知道

#include<stdio.h>
int main() {

	printf("%d\n", sizeof(char));//1
	printf("%d\n", sizeof(unsigned char));//1
	printf("%d\n", sizeof(int));//4
	printf("%d\n", sizeof(unsigned int));//4
	printf("%d\n", sizeof(float));//4
	printf("%d\n", sizeof(double));//8

	return 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【变回来了】

以上就是原码,反码,补码,加法减法在计算机内存中的运算方法

如有错误请纠正与讨论


版权声明:本文为weixin_58791060原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。