我想看到这篇文章的你一定已经了解了有符号整数在内存中的存储方式。而且,你可能不满足于知道什么,而是想知道为什么。要解决这个问题,我们需要把它分解成两个小问题来回答。1、为什么要否定?可能你想过,在八位内存结构中,我们可以直接用10000001来表示-1,何苦用11111111来表示-1呢。你应该知道,使用前一种存储方式的目的是为了方便你的记忆。存储负数的目的不仅仅是为了方便记忆存储,更重要的是用来计算负数。所以这就是为什么你的想法是错误的。(注意,这不是思路错误,而是你的思路是从方便记忆的角度考虑的。但是有符号负数的存储是为了解决方便计算的问题,是从方便计算的角度考虑的。这就是我们常说,不同层次、不同角度思考问题会产生不同的结果)从计算方便的角度来看,负数的倒数其实主要是解决相反数之和等于0的问题。1+(-1)=0->00000001+11111111=100000000。那么高位溢出留下00000000。2.为什么要加一?这个只要提一下就可以理解了。我们知道00000000表示0(正数的补码就是原码)。如果规则只是负数的倒置,那么11111111应该是-0的意思(虽然高等数学中可能有正负0的概念,但是它是建立在不存在的条件下的,我们知道计算机只能计算有限值,所以我们不考虑它),那不是浪费吗?那我们往后移一位,11111111表示-1。这就是字节类型为-128~127的原因
