关于原码、反码、补码取值范围的问题

2021年9月1日 4点热度 0条评论 来源: Sivan56

关于原码、反码、补码取值范围的问题

原码

整数X的原码其数符位0表示正,1表示负;其数值部分就是X绝对值的二进制表示

例如:

​ [+1]原码=00000001;[-1]原码=10000001

[+127]原码=01111111; [-127]原码=11111111

关于八位二进制,由于第一位是符号位,所以从负到正为11111111~01111111

故原码范围为-127到128,关于为什么01111111表示127,我们知道八位,2^7=10000000,表示的是128,注意几次方就有几个0

因此对于01111111,加一个就变成了10000000(128),故01111111表示127;

因此原码的取值范围为-127~128

原码中有正0与负0,[+0]原码=0000000;[-0]原码=10000000

反码

整数x的反码对于正数,与原码相同;对于负数,数符位为1,数值位为X的绝对值取反

例如:

[+1]反码=00000001;[-1]反码=11111110

[+127]反码=01111111;[-127]=10000000

反码中0也有正0和负0,[+0]反码=00000000;[-0]反码=11111111

因此反码的取值范围也是-127~127

补码

整数X的补码对于正数与反码、原码相同;对于负数,数符位为1,其数值位X的绝对值取反最右加1,也就是反码加一

例如:

[+1]补码=00000001;[-1]补码=11111111

[+127]补码=01111111;[-127]补码=10000001

注意的是,0的补码唯一

即[+0]补码=[-0]补码=00000000

我此刻可以发现,对比原码和反码,我们发现补码中少了一个0的编码,就是10000000(在原码和反码中表示-0)这个编码,

因此在补码中,将这个多出来10000000进行扩充,用它来表示-128

因此补码的取值范围位-128~127

    原文作者:Sivan56
    原文地址: https://blog.csdn.net/Sivan56/article/details/120044357
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。