关于原码、反码、补码取值范围的问题
原码
整数X的原码其数符位0表示正,1表示负;其数值部分就是X绝对值的二进制表示
例如:
[+1]原码=00000001;[-1]原码=10000001
[+127]原码=01111111; [-127]原码=11111111
关于八位二进制,由于第一位是符号位,所以从负到正为11111111~01111111
故原码范围为-127到127,关于为什么01111111表示127,我们知道八位,2^7=10000000,表示的是128,注意几次方就有几个0
因此对于01111111,加一个就变成了10000000(128),故01111111表示127;
因此原码的取值范围为-127~127
原码中有正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