您的位置:首页 > 其它

对原码,反码,补码的理解

2019-05-20 14:22 225 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_40478057/article/details/90374094

对原码,反码,补码的理解

今日在对java的学习中,遇到进制转换的问题,发现有符号的数即负数的进制转换涉及到原码,反码,补码相关知识。所以经过查阅资料,琢磨,下面是我自己对原码,反码,补码的理解。

计算机就是通过处理数据,才实现出这么多功能。在日常使用中,无论是点击按钮,打开图片,播放视频,亦或是其他操作,本质上都是对数据进行处理,因为,这些图片,视频等其储存在计算机中就是由0和1组成的二进制数据形式,只不过含有其特殊的编码,归本溯源都是二进制格式。现在就简单的以数字为例。

人在日常生活中是使用十进制数的,在计算机中,将会把十进制转换成二进制数。是以补码的形式存储在计算机中。但在补码之前,还有原码,和反码。

原码:

是在最早期,以二进制表现数字的一种形式。

正数:十进制转换成二进制【十进制数除以2,一直到商为0,取其余数,就为二进制数】
负数:在计算机中,最小的存储单位是字节,一个字节是八位,所以规定最高位为正负的符号位,如果是正数,符号位为0,负数的符号位为1。所以,原码中负数的二进制数就是将此负数的绝对值的原码的最高位变为1。

十进制 二进制
42 0010 1010
-42 1010 1010
7 0000 0111
-7 1000 0111

但是这样的负数原码在计算时却出现问题,42+(-7)应该为35,使用此二进制数相加减,得到的结果为1011 0001,十进制是177.此时计算机中的计算是把-7的二进制数1000 0111当成正数135来进行计算的。所以原码中的负数并不符合要求,所以诞生了反码。

反码:

反码规定,最高位仍旧是符号位,正数的原码和反码相同,负数的反码是在此负数的原码基础上,除符号位,将其余各位取反。

十进制 二进制
42 0010 1010
-42 1101 0101
7 0000 0111
-7 1111 1000

但是反码也没有解决其计算问题,即42+(-7)=35,在二进制计算里,得到结果为0010 0010为34。42+(-42)=0的二进制也出现了问题,得到的结果不是0。所以出现了补码。

补码:

正数的补码和原码,反码一致。负数的补码就是在反码的基础上加1。

十进制 二进制
42 0010 1010
-42 1101 0110
7 0000 0111
-7 1111 1001

经过计算。42+(-7)=35,二进制计算结果为0010 0010 + 1 =0010 0011,十进制也为35。42+(-42)=0,二进制计算结果为0000 0000,十进制为0。这样补码就完美解决了正负数遇到的各种问题,所以计算机中存储数据都是以补码形式。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: