初学者很容易把这三种码搞混,主要是记不清楚它们三个的定义,这里给出大家明确的定义,方便以后复习。
我们从正数和负数两方面来学习,但我们得先知道二进制数的首位表示的是这个数的正负,也就是符号位,最高位为1,表示为负数,最高位为0,则说明这个数为正数。
目录
1.正数原码、反码、补码
正数其实很简单,正数的原码、反码、补码都是相同的;
原码=反码=补码:把一个正数直接写出它的二进制表示形式得到的就是这个数的原码。
这里我们可以看一个例子:比如数字2,它的
原码:00000000 00000000 00000000 00000010
反码:00000000 00000000 00000000 00000010
补码:00000000 00000000 00000000 00000010
2.负数原码、反码、补码
负数就有说法了,三种码的定义分别是
原码:把一个负数直接写出它的二进制表示形式得到的就是这个数的原码,但是符号位要改 为1;
反码:原码除符号位以外,其余位按位取反;
补码:反码+1;
我们看哪个例子:比如数字-2,它的
原码:10000000 00000000 00000000 00000010
反码:11111111 11111111 11111111 11111101
补码:11111111 11111111 11111111 11111110
3.原码、反码、补码的相互转换
正数的原码、反码、补码相同,不需要我们转换,我们这里只需要学习负数的转换。
负数
按照上面负数三种码的定义是一种正向转换,我们也需要知道如何从补码转换到反码转换到原码。有两种转换方式。
1.把补码-1得到反码,再把得到的反码除符号位以外所有位按位取反得到原码;
2.补码除符号位按位取反在+1直接得到原码;
用图来描述就是这样:
4.原码、反码、补码的表现形式
内存中存储的起始是补码的二进制,在参与移位时,移动的都是补码;也就是说只要是整数内存中存储的是二进制的补码;
在给我们显示时打印出的都是原码,按原码来变幻成各种进制的值,我们一般都是十进制。
简单来说就是:打印原码,存储补码。反码一般用不到,在那种专门考察题中会遇到。
例如:我们有个数需要打印,由反码转换过来的 原码是 10000000 00000000 00000000 00000011,我们编译器最终输出的就是 -3。
差不多就是这些了,希望对大家有所帮助!!!