java中 byte为8 bits,那么-128为什么是最小值?

简介: 我们知道java中基本类型byte占8 bits,取值范围是-128到最+127,从这个正负号大家也能看出表示这个范围的二进制数是有符号位的,就是第一位。

40.png

我们知道java中基本类型byte占8 bits,取值范围是-128到最+127,从这个正负号大家也能看出表示这个范围的二进制数是有符号位的,就是第一位。


比如+127是 0111 1111 而 -128是 1000 0000


正数好理解,负数是通过原码取反后+1 生成的补码表示


比如-3的 源码是 1000 0011 反码是 1111 1100 补码是 1111 1101

计算机得到 1111 1101 后经过计算就知道是-3了。


然而这么算的话,最小的负数应该是 -127,原码为:1111 1111,补码为 1000 0001 ,为什么会是 -128 呢?


来看0这个数字如何表示,  

  • 一个 +0 0000 0000
  • 一个 -0 1000 0000


而数学只有一个0,就把 0000 0000表示为0,多出的这个一个补码 1000 0000 人为规定为 -128!


同理,其他边界值比如int的 最小值-231 也是一个道理。


下面是一道很有意思的小题,大家可以试一下,以下是java代码:


byte i =127;
System.out.println(++i);


btw


一直以来IDEA启动就比较慢(不算项目加载时间,单纯软件的启动时间),不爽它很久了,于是决定优化它,结果发现无论我怎样优化它的软件启动时间都在10秒(不知道正版的用户是不是这样的),据IDEA官方介绍它的2019版本启动时间会更快。


相关文章
|
Java
java 读取文件 获取byte[]字节 并执行Gzip的压缩和解压
java 读取文件 获取byte[]字节 并执行Gzip的压缩和解压
129 0
|
7月前
|
Java
java使用Stream流找出集合对象中最小值
java使用Stream流找出集合对象中最小值
490 1
|
6月前
|
Java Apache Maven
Java:commons-codec实现byte数组和16进制字符串转换
在上述代码中,`Hex.encodeHexString(bytes)`用于将byte数组转换为16进制字符串,`Hex.decodeHex(hexString)`用于将16进制字符串转换为byte数组。
121 0
|
6月前
|
Java Apache Maven
Java:commons-codec实现byte数组和16进制字符串转换
在上述代码中,`Hex.encodeHexString(bytes)`用于将byte数组转换为16进制字符串,`Hex.decodeHex(hexString)`用于将16进制字符串转换为byte数组。
136 0
|
8月前
|
存储 算法 Java
Java:查找一个给定数组中的最大值和最小值
Java:查找一个给定数组中的最大值和最小值
|
8月前
|
Java Go C++
Golang每日一练(leetDay0116) 路径交叉、回文对
Golang每日一练(leetDay0116) 路径交叉、回文对
66 0
Golang每日一练(leetDay0116) 路径交叉、回文对
|
8月前
|
Python Java 算法
Java每日一练(20230405) 地下城游戏、汇总区间、寻找旋转排序数组中的最小值2
Java每日一练(20230405) 地下城游戏、汇总区间、寻找旋转排序数组中的最小值2
56 0
Java每日一练(20230405) 地下城游戏、汇总区间、寻找旋转排序数组中的最小值2
|
8月前
|
Java 索引
【Java每日一题】— —第十八题:求二维数组中的元素最小值及其索引。
【Java每日一题】— —第十八题:求二维数组中的元素最小值及其索引。
|
8月前
|
存储 Java 索引
Java找出数组中的最大值和最小值
Java找出数组中的最大值和最小值
167 0
|
8月前
|
SQL 关系型数据库 MySQL
PostgreSQL【异常 01】java.io.IOException:Tried to send an out-of-range integer as a 2-byte value 分析+解决
PostgreSQL【异常 01】java.io.IOException:Tried to send an out-of-range integer as a 2-byte value 分析+解决
533 1