首页 > 其他分享 >关于byte的范围为什么是-128到127

关于byte的范围为什么是-128到127

时间:2023-06-23 13:33:13浏览次数:34  
标签:反码 补码 1111 127 128 0000 byte 原码

一 基础知识

在讲byte的范围前,先普及下在java中数据在计算机中的表示方法,数据在计算机中都是用二进制表示的,并且是用补码进行数据计算的。

先引入原码,反码,补码:

原码:原码是一种计算机中对数字的二进制定点表示方法,一般进制的最高位是符号位,1代表负号0代表正号。

原码举例:(对于十进制转换成二进制就不多说,自行解决)

15 对应的原码就是 0000 1111(0是代表正号)

-15 对应的原码就是 1000 1111 (从左至右第一个1代表负号)

反码:若数值是正数的情况下,其反码是跟原码一样的

若数值的负数的情况下,其反码是在原码的基础上,保证符号位不改变,其他位遵循0变1,1变0的原则。

反码举例: 15 对应的反码就是 0000 1111(与原码保持一致)

-15 对应的反码就是 1111 0000(符号位与原码一致,其他位遵循0变1,1变0原则)

补码:若为正数,其补码与原码保持一致;若为负数,其补码在相应的反码上+1;

补码举例 15 对应的补码就是 0111 1111(与原码保持一致)

  • -15 对应的补码就是 1111 0000
  • + 1
  • ------------------------
  • 对应的补码就是 1111 0001 (在反码的基础上加1)

由此得出结论正数的反码,补码都跟原码保持一致。

负数的反码就是在原码的基础上保持符号位不变,其他位遵循0变1,1变0原 则,其补码就是在反码的基础上+1;

计算过程:比如 -15 + (2)=-13在计算机里如何实现

分析 :要知道计算机计算都是要用补码,所以第一步转换成补码形式,用补码进行加减

  • 数 补码
  • -15 1111 0001
  • + 2 0000 0010
  • ----------------------
  • 1111 0011

但是要明白你刚刚得出的答案是补码形式,当计算机要要得出最终的十进制答案时,你就得把刚刚的补码再逆转换成原码形式,最后再从二进制原码形式转化成十进制

如 补码 1111 0011

反码 1111 0010

原码 1000 1101

数 -13

二 理解方式:关于byte的范围为什么是 -128——127?

有了上面的基础,我们来解决今天的问题,首先要知道byte是一个字节,一个字节是占8位, 如 _ _ _ _ _ _ _ _ ,在这8个位置上只能填0,1,我们根据排列组合的知识那么一共2^8=256种,也就是说byte能够表示的数据一共有256个数,根据基础知识中的二进制第一位是符号位,又因为正数补码和原码是一致的,所以正数最大值的补码 0111 1111,其代表的就是127,那么从127-1之间存在127个正数,加上0就是128个数,所以负数占一半,也就是128个数,(如果上面理解不了, 请看下图)。

接下来我们按照数递减原则来解决问题

  1. 正数的最大值应该是 0111 1111 127 (补码:再次提示计算机的数据都是以补码形式)
  • 0111 1110 126
  • 0111 1101 125
  • ..............................
  • 0000 0001 1
  • 0000 0000 0 (为了方便理解 我把0看成正数)

由上可知补码从0000 0000 到 0111 1111 中存在128个数字

0~127:128个数

接下来负数从大到小最大值是 -1 对应的原码 1000 0001

反码 1111 1110

补码 1111 1111

补码

  • 则负数从大到小的补码从大到小顺序排列如
  • - 1 1111 1111
  • -2 1111 1110
  • -3 1111 1101
  • ................
  • -127 1000 0001
  • -128 1000 0000 这数补码实际是-0的补码

-128— -1(共128个数) (这里是关键,0和-0不是同一个数,也就是说-0的补码用来表示-128了,-0的补码"10000000"通过逆向计算刚好得到-128这个值)

正数和0一共128个 负数128个 刚好满足2^8=256个数

所以byte的范围是 -128——127!!!

由此其他类型的范围也可推出。

标签:反码,补码,1111,127,128,0000,byte,原码
From: https://www.cnblogs.com/javaxubo/p/17499051.html

相关文章

  • ERROR 1153 (08S01): Got a packet bigger than 'max_allowed_packet' bytes
    今天在批量伪造测试数据时,MySQL收到下面异常:ERROR1153(08S01):Gotapacketbiggerthan'max_allowed_packet'bytes。这是因为没有调整mysql的默认配置,默认最大只能处理16M的文件,而我要导入的伪造数据有50M的一个SQL。于是调整配置文件:/etc/my.cnf修改mysql的最大允许包大小......
  • apache绑定于127.0.1.1
    Ubuntu下装Apache后,有时候,会绑定的地址为127.0.1.1。即提示信息:apache2:Couldnotreliablydeterminetheserver'sfullyqualifieddomainname,using127.0.1.1forServerName其实只要是127.开头的都一样,都是回环地址。你随便访问一个127.*都访问到的是本机。不过看起来......
  • 车灯IC 平均电流型LED降压恒流驱动AP5127
    产品描述 AP5127是一款PWM工作模式,高效率、外围简单、内置功率管,适用于12-100V输入的高精度降压LED恒流驱动芯片。输出最大功率可达25W,最大电流2.5A。AP5127可实现全亮/半亮功能切换,通过MODE切换:全亮/半亮/循环模式。AP5127工作频率固定在140KHZ,同时内置抖频......
  • 火山引擎数智平台最新直播活动:ByteHouse技术架构与最佳实践分享
    数据的时效性,正深刻影响着企业的发展。以大型半导体制造厂商为例,不同于常规工厂生产流水线,半导体制造通用的无人实验室生产模式高度依赖机械臂作业,且对整个生产调度链路中的精密度要求非常高,这背后主要依靠MES(ManufacturingExecutionSystem,制造执行系统)完成。因此,MES系统数据推......
  • 火山引擎数智平台最新直播活动:ByteHouse技术架构与最佳实践分享
    数据的时效性,正深刻影响着企业的发展。 以大型半导体制造厂商为例,不同于常规工厂生产流水线,半导体制造通用的无人实验室生产模式高度依赖机械臂作业,且对整个生产调度链路中的精密度要求非常高,这背后主要依靠MES(ManufacturingExecutionSystem,制造执行系统)完成。 因此,MES......
  • 'utf-8' codec can't decode byte 0xbc in position 1182: invalid start byte
    2.如果是字符集出现错误,建议多选择几种字符集测试一下:选择的经验是:如果是爬取到的网页文件,可以查看网页文件的meta标签下的charset属性值。例如:<metacharset="UTF-8">1也可以使用notepad++打开,查看下右下角的部位,会指示该文件是那种编码。 用一个例子来演示会更加清晰......
  • RT-THREAD的SFUD驱动简介基于W25Q128
    SFUD简介SFUD是一款开源的串行SPIFlash通用驱动库。详细介绍可查看官方说明,作为一个通用的中间套件,帮用户屏蔽了底层的FLASH操作,也方便用户使用不同的FLASH时进行移植。只需要配置好SPI就可以完成驱动的移植。FLASH特点FLASH写的时候,只能从1写到0,而不能从0写到1。因此写之......
  • UVA12716 GCD等于XOR GCD XOR
    UVA12716GCD等于XORGCDXOR一道数学题。 首先,我们可以知道,a-b>=gcd(a,b)=c;其次,a-b<=axorb=c;综上,可得a-b=c,即a-b=axorb.由于范围不大,直接枚举。第一层枚举c(因为c较少),第二层枚举a,(b=a-c) 再判断c是否等于a^b即可。#include<bits/stdc++.h>usingnamespacestd;......
  • 3、【java程序运行监控byteman】Byteman脚本详解及javaagent和byteman结合使用详细示
    java程序运行监控byteman系列文章1、【java程序运行监控byteman】之安装部署和入门示例2、【java程序运行监控byteman】使用示例(运行中方法耗时监控、javaagent监控、jvm监控、规则的检查、是否运行以及查看等)3、【java程序运行监控byteman】Byteman脚本详解及javaagent和bytem......
  • 和利时MACSV6.5.3中4byte数据合并转换为单精度浮点数float
    和利时MACSV6.5.3中4byte数据合并转换为单精度浮点数float代码截图验证完整可导入代码复制到记事本中,保存为xml文件,在和利时M6AutoThink中导入<?xmlversion="1.0"encoding="ISO-8859-1"?><pou> <path><![CDATA[USER]]></path> <name>IEEE754</name&g......