二进制负数的一些问题

1、补码

补码的存在是为了在计算机内部将减法变成加法;

正数的补码是原码本身,负数的补码是绝对值的反码加1,补码是用正数表示负数,负数的补码与绝对值原码相加等于0,因为:
对于8位二进制来说,反码与原码相加一定得:1111 1111,这是因为反码是将原码的每一位都取反了,相加的时候,每一位上都是1个1,一个0。而补码与原码相加,就是反码+1+原码,也就是:
1111 1111+0000 0001=1 0000 0000,溢出的一位忽略掉,最后得到:
0000 0000;

此时,5-5就可以表示为5+(-5),而-5就用补码表示;

当计算结果为负数时,得到的结果也是补码。

2、负数的二进制表示

负数的二进制用补码表示,补码是负数绝对值的反码加1,如-5的补码:

-5的绝对值是5,二进制为:0000 0101,则补码是:
1111 1010+0000 0001=1111 1011

若要根据补码算出十进制,则通过“反码加1”得到的是绝对值,如:
1111 1011是-5的补码,将其“反码加1”后得到:
0000 0100+0000 0001=0000 0101
是十进制的5,所以结果是-5;

3、short类型的取值范围

short类型是2字节的,取值范围是-32768~32767,最高位是符号位,之所以负数比正数多一个是因为:

当最高位为0时,表示正数,范围是:
0000 0000 0000 0000~0111 1111 1111 1111,即0~32767

当最高位为1时,表示负数,范围是:
1000 0000 0000 0000~1111 1111 1111 1111,全部是补码形式,其中,1000 0000 0000 0000的补码是:
0111 1111 1111 1111+1=1000 0000 0000 0000,表示为十进制是32768,又因为是负数,所以结果是-32768;
而1111 1111 1111 1111的补码是:
0000 0000 0000 0000+1=0000 0000 0000 0001,表示为十进制是1,所以结果为-1,所以范围是-1~-32768;

正数和负数范围内都是32768个数,只是0算在正数里了,所以看上去正数比负数少了1;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值