『踩坑记录』为什么10000000表示的是 您所在的位置:网站首页 1000的补码为什么是-8 『踩坑记录』为什么10000000表示的是

『踩坑记录』为什么10000000表示的是

2023-09-07 19:50| 来源: 网络整理| 查看: 265

首先,我们在学习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 实验室设备网 版权所有