负数的二进制表现形式(对应的正数二进制取反加1)

 例子: 使用(原码、反码、补码的转换)进行数学运算

在计算机中,不存在减法运算,只有加法

比如: 76-32 的运算,在计算机中就是76+(-32)

在二进制的表示中,若为负数,则最高位为1

举个例子: char类型的数据,1个字节 ( 1个字节 = 8位的二进制 )



76  (正数的原码、反码、补码都是一样的)
原码:0100 1100
反码:0100 1100
补码:0100 1100

-32 
原码:1010 0000     负数的原码:最高位(符号位)为1
反码:1101 1111     反码:除了符号位其他取反
补码:1110 0000     补码:反码+1 (注意,这里+1是最右边+1,逢2则等于0后,再进1,不是每一位都+1)

运算时,补码相加

  0100 1100
  1110 0000
---------------- +
1 0010 1100
运算完毕,若最高位有进位,则舍弃最高位。
结果: 0010 1100 

该结果为补码相加的结果,然后转为反码,再转为原码,再转十进制 (当然正数的原码、反码、补码都是一样)
所以:
补码: 0010 1100 
反码: 0010 1100
原码: 0010 1100
转十进制为 44

所以最后计算结果为: 44



举个例子:
在java中,int类型的数据在内存中占32个字节。

正整数 6 用二进制表示:
0000-0000 0000-0000 0000-0000 0000-0110 

负整数 -6 用二进制表示:

1. 对应的正数二进制取反
        0000-0000 0000-0000 0000-0000 0000-0110

        1111-1111 1111-1111 1111-1111 1111-1001   (取反)
    +   0000-0000 0000-0000 0000-0000 0000-0001   (加1 )
----------------------------------------------------------
        1111-1111 1111-1111 1111-1111 1111-1010   (等于 -6 )




当然还有下面这种情况和其他情况:
    因为同一个数据,在不同的位数的系统和不同的计算机语言占用的内存不同。(个人见解,可能有误)

1111-1111 1111-1111 1111-1111 1111-1111 1111-1111 1111-1111 1111-1111 1111-1010

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值