C语言原码、反码与补码

初学者很容易把这三种码搞混,主要是记不清楚它们三个的定义,这里给出大家明确的定义,方便以后复习。


我们从正数和负数两方面来学习,但我们得先知道二进制数的首位表示的是这个数的正负,也就是符号位最高位为1,表示为负数,最高位为0,则说明这个数为正数。


目录

1.正数原码、反码、补码

2.负数原码、反码、补码

3.原码、反码、补码的相互转换

4.原码、反码、补码的表现形式


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直接得到原码;

用图来描述就是这样:

C语言原码、反码与补码_第1张图片

4.原码、反码、补码的表现形式

内存中存储的起始是补码的二进制,在参与移位时,移动的都是补码;也就是说只要是整数内存中存储的是二进制的补码;

在给我们显示时打印出的都是原码,按原码来变幻成各种进制的值,我们一般都是十进制。

简单来说就是:打印原码,存储补码。反码一般用不到,在那种专门考察题中会遇到。

例如:我们有个数需要打印,由反码转换过来的                                                                       原码是    10000000 00000000 00000000 00000011,我们编译器最终输出的就是 -3。


差不多就是这些了,希望对大家有所帮助!!!

你可能感兴趣的:(c语言,开发语言)