问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

【秒懂】byte的取值范围为什么是-128~127?

发布网友 发布时间:2022-10-20 11:12

我来回答

1个回答

热心网友 时间:2024-01-13 22:46

1.byte占用8位,每位用0或1表示,能够表示256(2^8)个数据。

2.这8位分为符号位(最高位)和数值位(剩余七位),符号位0表示正数,1表示负数。

3.按上一步的理解,容易得到(+127:0111 1111、+1:0000 0001、+0:0000 0000、-0:1000 0000、-1:1000 0001、-127:1111 1111),计算机底层定义了+0(0000 0000)就是0,那么“可怜的-0”又该何去何从呢?计算机遇到这个二进制该如何处理呢?总不能把这两个都对应0吧,这显然是资源浪费。

4.到这里我们都认为最高位是不参与计算数值的,仅仅是一个符号位,按这种思路byte的八位是无论如何也表示不出-128。而“可怜的-0”又不知道自己代表谁,不得而知“可怜的-0”就是-128。(为什么呢?凭什么呢?你说代表-128就代表-128呀!为什么不能是+128、-250、+250.......)。

5.到这里我们已经很粗浅地回答了-128~127中的-128的由来,基本也回答了这个题目。

6.可是然而但是——对于程序员来说,上诉的分析【首先】是结论正确,但是过程错了。错误在于——负数的二进制表示是错误的,比如-127:1111 1111,这是不对的。计算机发现了1111 1111会把它认为是-1而不是-127。【其次】没有解释为什么-0最后表示成-128。

7.计算机基础知识普及:原码、反码、补码
        <1>计算机存储有符号的整数是都是存储它们的补码。Java语言都是有符号位的。
        <2>正数和0的补码、反码是本身原码;所以对于正数来说,可以理解为不存在反码和补码。
        <3>负数的反码是是符号位不变,其它位取反;补码是在负数(改为,反码,2021-07-31)的基础上加1(符号位不变)。负数就是矫情啊!
        <4>计算机中用补码进行加法运算。

8.接着从人的思考方式理解下当计算机处理1111 1111的过程,首位是1,自然是负数,而且这是补码,那么对应的原码就是,先减1,变成1111 1110,符号位不变,其他取反,变成1000 0001,也就是-1!所以从10000001到11111111依次表示-127到-1。。对之前的分析过程是不是很打脸😁。

9.最后来解决这个-128为什么可以用1000 0000表示。
   这里我分析的是byte,它就8位。在无符号位的二进制中128的表示为1000 0000。有符号位的情况下byte好像无法表示+128或-128。
   如果我们假设现在byte不是占用8位,而是9位,最高位是符号位。那么-128就能够是1 1000 0000,其补码也是1 1000 0000,很神奇吧,一样的。-128的补码尾八位就是1000 0000。那就规定【1000 0000是-128的补码,且-128是没有原码和反码的,即不能利用1000 0000反推其原码和反码】。

10.如果你对9步的推导表示不太接受,那么简单就认为计算机规定了1000 0000就是-128,是一种人为设计没有什么道理可以言(据说是印度阿三设计的)。其实这么设计也是很巧妙的,在于:
    【其一】对于如果大于8位的有符号整数数据类型,-128的补码尾八位刚好是1000 0000。
    【其二】比如127(0111 1111)加1(0000 0001)刚好得到-128(1000 0000),-128(1000 0000)加1(0000 00001)等于-127(1000 0001)这样从-128~127的反码首尾相连,形成了一个闭环,就像时钟一样。   
    【其三】在计算机中减法运算可以转换成加法运算,比如8-1——>8+(-1)——>补码运算:(0000 1000) + (1111 1111) = (0000 0111) 刚好是7。-128+127——>(1000 0000) + (0111 1111) = (1111 1111)刚好是-1,-128的补码完美的适用于减法。

结论:
    【1】计算机中负数是用补码的形式保存、并用它参与加减法运算的,减法会被转换为加法,计算机中没有减法运算。
    【2】反码是为了解决减法运算,补码是为了解决反码产生的±0的问题。参考(https://blog.csdn.net/boatalways/article/details/17027573)
    【3】对人而言二进制所代表的值一定是从原码求出的,开头如果是1的二进制,一定要说明其是原码、反码还是补码。
    【4】在原码、反码、补码相互转换以及求对应的十进制求值时,符号位是绝不参与的,但是在加减过程中,是参与位运算的。
    【5】计算机中规定了+0对应的二进制就是0,那么-0就没有意义了,必须找一个数和它对应。
    【6】byte的最小值-128、short的最小值-32768、int的最小值-2147483648都是用对应的-0的原码来进行表示,这是人为规定的、人为规定的、人为规定的。但是这么规定又很巧妙,妙在上述10中的三点。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 养宠物的人遵守规则,是不是就能和别人平安相处呢? 企业培训学到了什么 培训感悟简短 有关培训的感悟 通过培训学到什么 培训你学到了什么 领导问培训学到什么怎么回复 谁能给翻译一下这段英文什么意思? Are you interested in signing up for one of my yoga classes? sign... 质押的股份可以转让吗 查看win7旗舰版系统如何获取system权限教程 windows7下如何取得system权限 电驴veryCD的日志在哪里找? 为什么安了电驴,电驴的首页不是VERYCD,而且下载时出现QQ旋风~_百度... 求我喜欢你,你知道吗网剧,百度云 ...CreativeCloudCleanerTool卸载不了,怎么删除干净? 香蕉的营养价值是什么 不同颜色的香蕉营养如何 运营者怎么登录微信公众平台 为什么说吃粉条吃多了会得老年痴呆症 女孩英文名,好听的 请各位大神帮忙看看,这个火焰纹南红值多少钱? ...sql server 2008 r2 一些存储过程被加密了,谁有解密工具? SQL SERVER 2008 R2 数据库加密问题 芦笋怎么做给宝宝吃 芦笋如何做给宝宝吃 上海对外经贸大学研究生学费 nike6.a0r.cn是什么网站? 分别写出有符号和无符号1字节,2字节,4字节所能表示的整数范围 皇天无亲惟德是辅是什么意思 皇天无亲惟德是辅的意思 皇天无亲惟德是辅的意思 皇天无亲惟德是辅的解释 《陋室铭》“惟吾德馨”中的德是什么意思? 纯干货!python 在运维中的应用 (一):批量 ssh/sftp 市值30个亿的新能源企业有哪些? 新能源的企业有哪些 惟吾德馨的“德”字什么意思 大学生申请助学贷款怎么合理使用? 如何在家里做简单又好吃的美食 一个人在家既好吃又最简单做的家常饭_百... 昆山博俊科技里面活干着累吗 深圳市博俊科技有限公司怎么样? 长川科技股票后市走势?长川科技股市行情分析?长川科技股票最近消息? 长痘痘的人不能吃什么 8700装什么散热器好,最好6热管的,散热好的,300内 3ds挪到某个图标就报错 3ds开机出现英文 怎么把音频文件通过重命名把它变成文件夹? 二甲四氯钠用于樟树除草有没有药害, 本人要写小说,有一个组织里,所有人都用代号代替本名,求代号,越多