原码、反码、补码
前言
我们都知道计算机里只能存储二进制数,也就是意味着计算机只认识0和1。
比如int a = 73;
这条语句的意思是把十进制数73的二进制代码放在a里。而不是直接把73这个十进制数放进去。
而不同的类型的数据存储在计算机时转化成二进制的形式也不一样,转化成二进制的形式有原码、补码和反码。
各数据类型存储方式
1.整型以补码
的形式转化成二进制代码从而存储在计算机里的;
2.字符的存储方式从本质上来说和整型的相同
,字符先按照ASCLL码转化成所对应的十进制整数,然后在按照整型的存储方式进行转化。
3.实数则按照二进制浮点数算术标准
(IEEE 754)转化成二进制代码存储在计算机里的;
原码、反码、补码概念
因此我们来讨论一下整型的存储方式,我们已经知道整型是以补码的形式转化成二进制代码来存储在计算机里的。那么什么是补码呢?什么又是原码、反码呢?
原码:原码又叫做“符号绝对值”码,从它的名字来看,它是有符号的,在原码里面最高位是符号位,而其他的位就是这个整数的二进制数,符号位上如果是0则表示这个整数为正,1表示为负
。正整数的原码就是它的二进制。例如:7的二进制位0111,它的原码也就是0111.那么-7呢?由于7的二进制数是0111,而1表示负数,因此-7的原码为10111.
正整数的原码、补码、反码相同。
反码:将原码除了符号位之外的所有位按位取反,也就是原码的最高位不变,剩下的1变成0,0变成1。
补码:原码虽然看起来比较简单。但是也应该清楚越简单所能实现的功能也就比较弱,它比较弱,那么就会增加CPU的压力。另外,对于0来说,使用原码,可以写成10000,也可以写成00000.如果采用补码,补码的所有运算都可以变成加法。因此补码完胜原码,并且原码在计算机里面没有被使用过。
原码、补码、反码的计算
正整数原码:为这个整数的二进制数
eg:
负整数原码:这个整数的绝对值的二进制数然后在最高位加上1
eg:
正整数反码:与它的原码相同。
eg:
负整数反码:这个整数的原码的符号位不变,其他的位按位取反
eg:
正整数补码:与它的原码相同;
eg:
负整数补码:它的原码+1;
eg:
如果已经知道了一个整数的补码,要求出其原码。则求补码的补码