为什么8位有符号数的范围为“-128 — +127”?

2023-11-04 23:38
文章标签 范围 符号 128 127 位有

本文主要是介绍为什么8位有符号数的范围为“-128 — +127”?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这是一个困惑了我几年的问题,它让我对现在的教科书和老师极其不满,从我N年前开始摸电脑时,就几乎在每一本C++教科书上都说,8位有符号的取值范围是-128~+127,为什么不是-127~+127呢,后来的java,int的聚值范围,再32位计算,-2^31 ~ +2^31-1,可是,却从来没有任何一本教科书或一个老师比我解释过这个问题。 原因没有在工作上或者是什么地方直接遇到它,所以我也一直忽略它,但心里总是有一根刺.直到刚才!!!!

就是刚才,无聊之极,在看汇编的书时,又遇到它了,但一如以往,书上直接地,有心地,明显地绕过了这个问题,真是可恶啊.     几经周折,终于把它搞清楚了: 
其实,它是计算机底层为了实现数值运算而决定的,涉及非常非常基础的原码,反码,补码知识,一般(99.9999%)都不会用得上. 那0.0001%,估计也就是计算机考试了. 
    话说: 
    用2^8来表示无符号整数的话,全世界的理解都是0 - 255了,那么,有符号呢? 用最高位表示符号,0为+,1为-,那么,正常的理解就是 -127 至 +127 了. 
    这就是原码了,值得一提的是,原码的弱点,有2个0,即+0和-0,还有就是,进行异号相加或同号相减时,比较笨蛋,先要判断2个数的绝对值大小,然后进行加减操作,最后运算结果的符号还要与大的符号相同. 
于是乎,反码产生了,原因....略,反正,没过多久,反码就成为了过滤产物,也就是,后来补码出现了. 
     补码的知识不说述,只说有关+127和-128的. 
     官方的定义 [-2^(n-1),2(n-1)-1],补码的0没有正负之分.原因呢?没有一本书上有说,这也是我这么火的原因,但通过思考,google,再思考,很快找到答案:      首先,难不免干点白痴般地事情,穷举一下... 正数,原码跟补码一样 

+127, 0111 1111 

+126, 0111 1110 

+125, 0111 1101 

+124, 0111 1100 

+123, 0111 1011 

+122, 0111 1010 ... 
  +4, 0000 0100  

 +3, 0000 0011   

+2, 0000 0010   

+1, 0000 0001 
   0, 0000 0000 (无正负之分)  
下面是负数了,值,原码,符号位不变其它取反,+1   

-1, 1000 0001, 1111 1110, 1111 1111 
-2, 1000 0010, 1111 1101, 1111 1110   

-3, 1000 0011, 1111 1100, 1111 1101   

-4, 1000 0100, 1111 1011, 1111 1100   

-5, 1000 0101, 1111 1010, 1111 1011   

-6, 1000 0110, 1111 1001, 1111 1010   

-7, 1000 0111, 1111 1000, 1111 1001   

-8, 1000 1000, 1111 0111, 1111 1000   

-9, 1000 1001, 1111 0110, 1111 0111 

-10, 1000 1010, 1111 0101, 1111 0110 

-11, 1000 1011, 1111 0100, 1111 0101 

-12, 1000 1100, 1111 0011, 1111 0100 

-13, 1000 1101, 1111 0010, 1111 0011 

-14, 1000 1110, 1111 0001, 1111 0010 

-15, 1000 1111, 1111 0000, 1111 0001 

-16, 1001 0000, 1110 1111, 1111 0000 

-17, 1001 0001, 1110 1110, 1110 1111 ... 

-24, 1001 1000, 1110 0111, 1110 1000 ... 
-99, 1110 0011, 1001 1100, 1110 0100 ... 
-124, 1111 1100, 1000 0011, 1000 0100 

-125, 1111 1101, 1000 0010, 1000 0011 

-126, 1111 1110, 1000 0001, 1000 0010 

-127, 1111 1111, 1000 0000, 1000 0001 

看出点什么了没有? 
如果没有,那么,给个提示, 再继续下去,下一个补码是什么呢? 

当然是 

-128, 先略过,再略过, 

1000 0000 1000 0000,那么,它的原码是什么呢? 
从补码求原码的方法跟原码求补码是一样的 
先保留符号位其它求反:  1111 1111, 再加1:11000 0000, 超过了8位了 

对,用8位数的原码在这里已经无法表示了 
关键就在这里,补码 1000 0000 为 -128 是不用怀疑的(上面的穷举),

 那么,回到原码处, 它的原码也是 1000 0000(超出的自动丢失), 

1000 0000 在原码表示什么呢? -0, 但补码却规定0没有正负之分

 转换一下思路,看看计算机里,是怎么运算的: 

对于负数,先取绝对值,然后求反,加一 
-128 -> 128 -> 1000 0000 -> 0111 1111 -> 1000 0000 

现在明确了吧. 
所以, 8位有符号的整数取值范围的补码表示 

1000 0000 到 0000 0000, 再到 0111 1111 

即 -128 到 0, 再到 127 

最终 -128 ~ +127

这篇关于为什么8位有符号数的范围为“-128 — +127”?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/345963

相关文章

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密 可以将表情,动物,水果,表情,手势,猫语,兽语,狗语,爱语,符号,数字,字母,加密和解密 可以将文字、字母、数字、代码、标点符号等内容转换成新的文字形式,通过简单的文字以不同的排列顺序来表达不同的内容 源码截图: https://www.httple.net/152649.html

Leetcode面试经典150题-128.最长连续序列-递归版本另解

之前写过一篇这个题的,但是可能代码比较复杂,这回来个简洁版的,这个是递归版本 可以看看之前的版本,两个版本面试用哪个都保过 解法都在代码里,不懂就留言或者私信 class Solution {/**对于之前的解法,我现在提供一共更优的解,但是这种可能会比较难懂一些(思想方面)代码其实是很简洁的,总体思想如下:不需要排序直接把所有数放入map,map的key是当前数字,value是当前数开始的

过滤器:精密过滤器特点及应用范围概述

精密过滤器(又称作保安过滤器),筒体外壳一般采用不锈钢材质制造,内部采用PP熔喷、线烧、折叠、钛滤芯、活性炭滤芯等管状滤芯作为过滤元件,根据不同的过滤介质及设计工艺选择不同的过滤元件,以达到出水水质的要求。随着过滤行业的不断发展,越来越多的行业和企业运用到了精密过滤器,越来越多的企业加入了精密过滤器行业。   一、精密过滤器的性能特点及应用   1、精密过滤器的性能特点   (1)过滤精

【流程图】流程图符号

1、常用符号 2、例子(胡乱画的)

有符号和无符号的转化

1.无符号转有符号 测试结果: 2.有符号转换为无符号数 测试结果: 其他

流程图符号速查:快速掌握流程图绘制要点

流程图是一种以图形化方式表示算法或过程的步骤和逻辑关系的图表,它通过使用一系列标准的符号和连接线来清晰地展示流程的顺序和决策点。这种表示方法不仅使得复杂的过程更加易于理解,而且也便于跟踪和优化。以下是对流程图的进一步扩写,包括其制作步骤、应用场景和一些实用技巧。流程图常常用来表示一些动态过程,通常会有一个“起点”, 可以有一个或多个终点,流程图可以直观、明确地表示动态过程从开始到结束的全部步骤,在

Hessian矩阵判定极值之MATLAB实现符号解

By WC 1.9 .2015 1.Hessian矩阵 其定义如下: 如果函数f在D区域内二阶连续可导,那么黑塞矩阵H(f) 在 D 内为对称矩阵。原因是:如果函数f连续,则二阶偏导数的求

Arcgis字段计算器:随机生成规定范围内的数字

选择字段计算器在显示的字段计算器对话框内,解析程序选择Python,勾选上显示代码块, 半部分输入: import random; 可修改下半部分输入: random.randrange(3, 28) 表示生成3-28之间的随机数 字段计算器设置点击确定完成随机数的生成,生成的随机数如下图所示。

【硬刚ES】ES入门 (13)Java API 操作(4)DQL(1) 请求体查询/term 查询,查询条件为关键字/分页查询/数据排序/过滤字段/Bool 查询/范围查询/模糊查询/高亮查询/聚合查

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的ES部分补充。 1 请求体查询 2 高亮查询 3 聚合查询 package com.atguigu.es.test;import org.apache.http.HttpHost;import org.apache.lucene.search.TotalHits;import org.elasticse

【硬刚ES】ES入门 (8) 语法(6)DQL(3)组合查询/范围查询/模糊查询/单字段排序

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的ES部分补充。 9 组合查询 `bool`把各种其它查询通过`must`(必须 )、`must_not`(必须不)、`should`(应该)的方 式进行组合 在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search