说明如下:
对于8位带符号的二进制数:
原码:范围 -127~-0,+0~+127
二进制正数 0 0000000-0 1111111 , 十进制 +0~+127,共128种状态
二进制负数 1 1111111 -1 0000000, 十进制 -127~-0,共128种状态
反码:范围 -127~-0,+0~+127
二进制正数 0 0000000-0 1111111 , 十进制 +0~+127,共128种状态
二进制负数 1 0000000 -1 1111111, 十进制 -127~-0,共128种状态
补码:范围 -128~0~+127
二进制正数 0 0000000-0 1111111 , 十进制 +0~+127,共128种状态
二进制负数 1 0000000-1 0000001 , 十进制 -128~-1,共128种状态
注:
[-0]补码=[-0]反码+1=1 11111111+1= 00000000=[+0]补码,即
[-0]补码=[+0]补码
1.[+0]原码=0000 0000, [-0]原码=1000 0000;
2、[+0]反码=0000 0000, [-0]反码=1111 1111;
3、[+0]补码=0000 0000, [-0]补码=0000 0000
[-1]补码=[1 0000001]补码=1 1111110+1=1 1111111,即 [-1]补码是 -127
[-127]补码=[1 1111111]补码=1 0000000+1=1 0000001,即[-127]补码是 -1
[-128]补码=[-127]补码+[-1]补码 = 1 0000001+1 1111111 =1 0000000
结论:
原码范围:-127~-0,+0~+127,256种状态
反码范围:-127~-0,+0~+127,256种状态
补码范围:-128~-1,+0~+127,256种状态,因为[-0]补码和[+0]补码相同,在补码中-128代替了-0。也可认为是一种规定,这样可都是256种状态。
要注意:(-128)没有相对应的原码和反码, (-128) = (10000000)