首页 > 其他分享 >byte类型取值范围为啥是-128~127

byte类型取值范围为啥是-128~127

时间:2024-01-16 22:46:03浏览次数:39  
标签:0000 补码 VALUE 127 128 反码 byte 原码

一个字节是8个比特位,int类型有4个字节,也就是有32个比特位。

基本数据类型:

1 基本类型:byte 二进制位数:8   一个字节8个bit位
2 包装类:java.lang.Byte
3 最小值:Byte.MIN_VALUE=-128
4 最大值:Byte.MAX_VALUE=127
1 基本类型:short 二进制位数:16
2 包装类:java.lang.Short
3 最小值:Short.MIN_VALUE=-32768
4 最大值:Short.MAX_VALUE=32767
1 基本类型:int 二进制位数:32
2 包装类:java.lang.Integer
3 最小值:Integer.MIN_VALUE=-2147483648
4 最大值:Integer.MAX_VALUE=2147483647
1 基本类型:long 二进制位数:64
2 包装类:java.lang.Long
3 最小值:Long.MIN_VALUE=-9223372036854775808
4 最大值:Long.MAX_VALUE=9223372036854775807
1 基本类型:float 二进制位数:32
2 包装类:java.lang.Float
3 最小值:Float.MIN_VALUE=1.4E-45
4 最大值:Float.MAX_VALUE=3.4028235E38
1 基本类型:double 二进制位数:64
2 包装类:java.lang.Double
3 最小值:Double.MIN_VALUE=4.9E-324
4 最大值:Double.MAX_VALUE=1.7976931348623157E308
1 基本类型:char 二进制位数:16
2 包装类:java.lang.Character
3 最小值:Character.MIN_VALUE=0
4 最大值:Character.MAX_VALUE=65535

我们来看看为啥byte的取值范围是-128~127.我们都知道,1个byte占8个bit位,二进制为表示10100000,其中首位(最高位)是符号位,剩下的是数值位,所以能表示byte数值的只有7位,那么它的最大值很容易的用二进制表示为:1111111计算得到26+25+24+23+22+21+20 = 127,由于首位是符号位,所以很容易地得出byte的取值范围是-127~127,也就是1111 1111 ~ 0111 1111,那么-128是怎么来的呢?

计算机底层定义了 0000 0000 就是0.

原码、反码、补码的出现是为了方便计算机表示、计算负数参与的加减法运算。因此,原码,反码,补码是机器存储一个具体数字的编码方式。

原码:在数值前直接加一符号位的表示法,对于8位二进制来说:

[+7]原= 0 0000111 [-7]原= 1 0000111

反码:正数的反码与原码相同;负数的反码,符号位为“1”,数值部分按位取反。

[+7]反= 0 0000111 [-7]反= 1 1111000

补码:正数的补码和原码相同;负数的补码则是符号位为“1”,数值部分按位取反后再在末位(最低位)加1,也就是“反码+1”。

[+7]补= 0 0000111 [-7]补= 1 1111001

其中正整数的原码、反码和补码都一样;

负数部分:

原码和反码的相互转换:符号位不变,数值位按位取反;

原码和补码的相互转换:符号位不变,数值位按位取反,末位再加1;

已知补码,求原码的负数的补码:符号位和数值位都取反,末位再加1。

那为什么会有反码和补码呢?

  • 计算机没有减法器,只有加法器,所以只能做加法
  • 可以用负数代替减法

引用博客地址

8位二进制(有符号)的取值范围是-128~127的原因:在计算机中0是由0000 0000存储的,对于正数0000 0001~0111 1111(1~127).对于负数1000 0001~1111 1111(-1~-127).那么唯独只剩1000 0000(指-0)我们就把1000 0000作为-128.用1000 0000作为-128而不是128的原因是:

如果作为+128,+128的表示方法为01000 0000(原码反码补码均是),位数明显超过了8.所以要舍去一位,最高位代表的符号位是必选的。其他数值位则从低到高选取后7位,则成为0000 0000与1000 0000 并不符。

如果作为-128,-128的表示方法是11000 0000(原码),10111 1111(反码),11000 0000(补码),同样的要舍去以为那么舍去后的原码反码补码分别为:1000 0000,1111 1111,1000 0000.所以用1000 0000(-0)来代表-128.(但实际上-128是11000 0000).

-128的源码反码补码为1000 0000,1111 1111,1000 0000实际上是根据上面的运算得出来的。其实-128只有补码,原码反码代表的是-0的原码反码。但是真正做运算时某某1000 0000来做的。例如用-128+1:

-128的补码:1000 0000

1的补码: 0000 0001

运算结果 1000 0001(补码)

1000 0001是-127的反码,所以在正常情况下运算是正确的,加减运算时要避免溢出。

标签:0000,补码,VALUE,127,128,反码,byte,原码
From: https://www.cnblogs.com/bibibao/p/17968728

相关文章

  • 美国科技 5 巨头,研发狂烧 2020 亿刀!亚马逊 732 亿全球第一丨 RTE 开发者日报 Vol.127
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,......
  • CF1284E New Year and Castle Construction
    NewYearandCastleConstructionLuoguCF1284E题目描述给定大小为\(N\)的点集\(S\)。保证点集中的任意三点不共线,且不存在重复的点。设\(f(p)\)表示满足如下条件的\(S\)的四元子集\(T\)的个数:\(T\subsetS\\landp\notinT\)\(T\)中的元素能组成一个四边形,......
  • 'gbk' codec can't decode byte 0xff in position 0
    使用open()报错File"E:\python3\di1gexiangmu20231219\ex20.py",line10,inprint_allprint(f.read())^^^^^^^^UnicodeDecodeError:'gbk'codeccan'tdecodebyte0xffinposition0:illegalmultibytesequence默认情况......
  • 性能持续突破!火山引擎ByteHouse上线向量检索能力
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群随着LLM技术应用及落地,数据库需要提高向量分析以及AI支持能力,向量数据库及向量检索等能力“异军突起”,迎来业界持续不断关注。简单来说,向量检索技术以及向量数据库能为LLM提供外置的记忆单元,通......
  • 性能持续突破!火山引擎ByteHouse上线向量检索能力
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 随着LLM技术应用及落地,数据库需要提高向量分析以及AI支持能力,向量数据库及向量检索等能力“异军突起”,迎来业界持续不断关注。简单来说,向量检索技术以及向量数据库能为LLM提供外置......
  • STM32 ADS1284的开发学习
    1设备功能模式同步(SYNCPIN和SYNC命令)ADS1284可以同步到外部事件,如果同时施加同步脉冲,还可以将多个ADS1284设备同步在一起。该ADS1284有两种同步方法:SYNC输入引脚和SYNC命令。此外,还有两种同步模式:脉冲同步和连续同步。在脉冲同步模式下,ADS1284在每个同步事件时无条件同步......
  • CF1270G Subset with Zero Sum
    G.SubsetwithZeroSum很妙。一开始冲着背包去想的,显然不行。考虑他条件给的这个\(i−n\lea_i\lei−1\)化简一下得到\[1\lei-a_i\len\]题目要去求\[\sum\limits_{i\inS}a_i=0\]把所给信息往这个式子上靠。得到\[\sum\limits_{i\inS}i=\sum......
  • 全志R128 SDK架构与目录结构
    R128S2是全志提供的一款M33(ARM)+C906(RISCV-64)+HIFI5(Xtensa)三核异构SoC,同时芯片内部SIP有1MSRAM、8MLSPSRAM、8MHSPSRAM以及16MNORFLASH。本文档作为R128FreeRTOSSDK开发指南,旨在帮助软件开发工程师、技术支持工程师快速上手,熟悉R128FreeRTOSSDK的开发流......
  • python之bytes与str互转
    fromhex()bytes.fromhex()是一个内置函数,用于从十六进制字符串创建字节串(bytes)对象。fromhex()方法接受一个十六进制字符串作为输入,并将其转换为对应的字节串。输入的十六进制字符串可以包含数字0-9和小写字母a-f(或大写字母A-F)。以下是使用bytes.fromhex()的示例代码:hex_stri......
  • netty源码:(38)ByteToMessageDecoder类
    ByteToMessageDecoder是一个解码器,是一个ChannelInboundHandlerAdapter,它用来将ByteBuf中的字节流解析成另外的消息格式。它的核心方法是decode,decode方法的in参数表示接收字节的来源,out参数表示节码之后输出的目的地。比如,StringDecoder继承了ByteToMessageDecoder,它的decod......