『踩坑记录』为什么10000000表示的是 | 您所在的位置:网站首页 › 1000的补码为什么是-8 › 『踩坑记录』为什么10000000表示的是 |
首先,我们在学习C语言的过程中都知道,一个字节能够表示的有符号数的范围是[-128, 127],今天有些不理解的地方是-128是如何表示的? 我们都知道,有符号数最高位是符号位,最高位为0表示正数,最高位为1表示负数,所以一个字节中能够有效表示数据的其实只有7位,而7位二进制的最大值就是127,所以按照正常的理解,一个字节能够表示的有符号数的范围应该是[-127, 127],那-128是如何表示的呢? 我们知道CPU中没有加法器,所以负数使用补码的方式来存储,就可以使用加法器来实现减法。 补码的计算方法: 忽略符号位,对其他位进行取反,然后对取反的结果加1。 如-127:因为是负数,所以符号位为-1,绝对值为127,所以低7位全部为1,取反后全部为0,再加1,就是000 0001,所以最终结果是1000 0001。 由于一个字节中最高位是符号位,所以,计算机中+0和-0的编码是不一样的,+0的编码是:0000 0000;-0的编码是:1000 0000。于是将1000 0000规定为-128,这样就可以让有符号数多一个有用的数据点。这个值不能用普通的取反加1来计算。 而且1000 0000是-128刚好也可以满足基本的运算。如-127(1000 0001) + (-1)(1111 1111) = -128(1000 0000)。 |
CopyRight 2018-2019 实验室设备网 版权所有 |