计算机中数字的二进制存储形式

本文详细解析了计算机内部如何存储正数与负数,并通过实例演示了Java中二进制补码的计算过程,包括~5为何等于-6的解释。

今天,做个关于二进制的算法题,突然有个问题一直想不通为什么~5是6,计算机基础知识不过关啊,所以现在来弥补下,正数和负数在计算机中是怎么存储和计算的。

讲讲计算机中的存储形式:

计算机中存储的数都是以补码的方式存储的,而正数的原码,反码,补码都是一样的。但是负数的原码,反码,补码是不一样的。

 

 

下面都是以java中的int i=5为例。

 

正数5的原码就是其二进制码:00000000 00000000 00000000 00000101

            反码是:00000000 00000000 00000000 00000101

     补码是:00000000 00000000 00000000 00000101

-5的原码是:10000000 00000000 00000000 00000101;

      反码是:11111111 11111111 11111111 11111010;//除符号位所有位取反

      补码是: 11111111 11111111 11111111 11111011;//反码加1

 

那么java中~5是怎么计算的?

~5的补码:

  原码:00000000 00000000 00000000 00000101

      取反得补码:11111111 11111111 11111111 11111010

求~5的原码:由上面的补码的反码:11111111 11111111 11111111 11111001

           取反得原码:10000000 00000000 00000000 00000110;//也就是-6

 

计算机中的计算都是以补码的形式进行计算的:

-5的补码是: 11111111 11111111 11111111 11111011

1的补码是:00000000 00000000 00000000 00000001

那么-5+1就是:

                     

      11111111 11111111 11111111 11111011
+    00000000 00000000 00000000 00000001
       11111111 11111111 11111111 11111100                                                          

 

 

 

 

11111111 11111111 11111111 11111100是计算机中的补码,减1转换为反码是:11111111 11111111 11111111 11111011,取反得原码是:10000000 00000000 00000000 00000100;

 

 

补充一点:

二进制的减法:

0-0=1-1=0 
1-0=1
0-1=1(向高位借位)
  1 1 0 0 0 0 1 1  
-  0 0 1 0 1 1 0 1
-------------------
  1 0 0 1 0 1 1 0

转载于:https://www.cnblogs.com/loren-Yang/p/7513895.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值