负数在计算机中是怎么存储

本文介绍了负数在计算机中的存储方式,包括补码的概念,以及正负数的原码、反码表示。同时,讨论了位运算中的左移和右移,特别是负数在带符号和无符号右移时的区别,并通过实例演示了位运算的计算过程,帮助理解精度丢失的原因。
摘要由CSDN通过智能技术生成

今天,发生一件非常有趣的事情。

公司同事问了我一个问题:为什么 2.0 - 1.1 = 0.89999999 呢?不应该是 0.9吗?

原来是,他问了周围一圈的同事,都给他的是同一个回答,说这是精度问题。他百思不得其解,怎么就会产生精度问题呢。再问,就没人知道原因了。

然后,我就看到了他抱着一本厚厚的书在看。拿过来一看,是一本Java书,厚厚的六百多页,这还仅是第一卷。哟呵,这是准备大干一场啊。

看在他这么努力学习的份上,还有他那对知识极度渴望的眼神。我决定,把我毕生所学传授与他。

于是,就给他详细讲解了,计算机中是怎么存储一个数的,十进制是怎么在转二进制的过程中丢失精度的,以及浮点数是怎么遵循IEEE 754 规范的,在浮点数进行加减运算的过程中会经历对阶、移位运算等过程,以及在此过程中是怎么丢失精度的。(这些问题在之前的文章中都有解答,参看“为什么0.1 0.2=0.30000000000000004”)

然后,成功的把他彻底搞懵逼了。怎么这么难啊。

原来,他的计算机基础比我还匮乏,不知道什么是位运算,不知道什么是原码、反码和补码。

本着我的热心肠,我就给他普及了一下这些知识 ---- 负数的补码形式和位移运算。

我们知道,一个数分为有符号和无符号。对于,有符号的数来说,最高位代表符号位,即最高位1代表负数,0代表正数。

在计算机中,存储一个数的时候,都是以补码的形式存储的。而正数和负数的补码表示方式是不一样的。正数的补码就等于它的原码,而负数的补码是原码除符号

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值