Java 中,byte 数据类型的取值范围为什么是 -128 - 127 ?其它数值类型 都雷同
byte 的取值范围:-128 - 127
基本的数学计算方法,一个byte占8位,第一位为符号位,还有7位,7位能表示最大为:2^7 - 1 怎么来的呢:看如下数学计算
1111 111 = 2^0 + 2^1 + 2^2 + 2^3 + 2^4 + 2^5 + 2^6 我们不用使用加法来算这个值,而是换种思路,如下:
(A * 2) - A = A 本身,对吧,那么:
(2^0 + 2^1 + 2^2 + 2^3 + 2^4 + 2^5 + 2^6 )* 2 - ( 2^0 + 2^1 + 2^2 + 2^3 + 2^4 + 2^5 + 2^6 )= 依然是 2^0 + 2^1 + 2^2 + 2^3 + 2^4 + 2^5 + 2^6 的和
即:
2^1 + 2^2 + 2^3 + 2^4 + 2^5 + 2^6 + 2^7 -
2^0 + 2^1 + 2^2 + 2^3 + 2^4 + 2^5 + 2^6 通过抵消,最终变成了 2^7 - 2^0 = 2^7 - 1 = 127,就是这么来的。。。。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
我们只讨论 byte; byte 在计算机中是8位;第一位为符号位。0表示正数,1表示为负数,其余的7位表示 具体的值。要理解一点 就是 数值在计算机内存中的存储是补码的方式
存储的,有一定的规则,即正数的话 原码 反码 补码 一样,负数的话,原码是负数的绝对值,最高位 是1 ,反码是 最高位不变,然后其余位 取反 ,补码是 最高位不变,反码+1
举例:byte 能表示的正数的最大值为:
0111 1111 = 2的7次方 -1 = 127。
正数最小值为:
0000 0000 = 0;
正数的原码,反码 补码 相同。
再来看负数的最大负值:
1111 1111 = -2的7次方 -1 = -127
原码:1111 1111
反码:1000 0000
补码:1000 0001
------------------------------
再来看负数的最接近正数的值,即最小负值:
1000 0000 = -0;
原码:1000 0000
反码:1111 1111
补码:1000 0000(注意这里溢出了)
可见,-0 的原码 和 补码是一样的,实际上 计算机规定的,1000 0000 = -128 ;
通常说 -128 只有补码,没有原码和反码,因为原码是 -0 ,-0 你怎么能认为是 -128呢。
即:-128在计算机中的补码为:1000 0000 ,没有原码和反码;
是可以进行运算的,比如:
-128 + 3 = -125 在计算机中的计算如下:
补码(1000 0000)+ 补码(0000 0011)= 补码(1000 0011)
然后再把1000 0011转换成原码的步骤为:
符号位不变取反:1111 1100
取反后加1就是原码:1111 1101
再把原码转成十进制为:-125,计算的方法如图:

用计算器计算最快:原码去掉符号位,即:1111 1101 -->> 111 1101(7位) 粘贴在计算机的二进制那里:

总结:补码 1000 0000 就是 -128的意思,经过计算你会发现原码也是:1000 0000 ,但是我们通常说 1000 0000 没有原码,因为-0没有意义。
Java 中,byte 数据类型的取值范围为什么是 -128 - 127 ?其它数值类型 都雷同的更多相关文章
- C语言中各个数据类型的取值范围
因为CPU的差异,各系统中的数据类型所占的字节数(bytes)不同,二进制位数(bit)也不同.那么怎样才能知道自己系统的数据类型的字节数,位数呢? 授之以鱼不如授之以渔,大家可以自己从电脑里获取这些 ...
- 关于JAVA中Byte数据类型二进制赋值运算报错问题
自从JDK7更新之后,新增了二进制变量的表示,支持将整数类型用二进制来表示,用0b开头: 例如: byte b= (byte) 0b1000_0001; short s = (short) 0b100 ...
- JAVA中的变量及取值范围
字节是二进制数据的单位.一个字节通常8位长.但是,一些老型号计算机结构使用不同的长度.为了避免混乱,在大多数国际文献中,使用词代替byte.变量: 变量的数据类型:变量名=变量值 数据类型 基本型 数 ...
- 为什么数值类型byte取值范围是(-128~127)?
在解决这个问题之前,我们先了解几个概念? 一.原码, 反码, 补码的概念 正数的反码和补码都与原码一样: 负数的反码.补码与原码不同,负数的反码:原码中除去符号位,其他的数值位取反,0变1,1变0.负 ...
- 带符号的char类型取值范围为什么是-128——127
以前经常看到带符号的char类型取值范围是-128——127,今天突然想为什么不是-127——127,-128是怎么来的? 127好理解,char类型是8位,最高位是符号位,0正1负,所以011111 ...
- java中给集合快速取值最大值和最小值
public static void main(String[] args) { List list = new ArrayList(); list.add(new Double(123.23)); ...
- Java中byte、short、char、int、long运算时自动类型转化问题
-------------------------------------------------------------------------------------------------- ★ ...
- mysql中数据类型的取值范围
mysql整型bigint.int.mediumint.smallint 和 tinyint的语法介绍,如下: 1.bigint 从 -2^63 (-9223372036854775808) 到 2^ ...
- 关于JAVA中Byte类型的取值范围的推论(*零为正数,-128在计算机中的表示方法...)
先看一段推理<*一切都是在8个比特位的前提下,讨论二进制的符号位,溢出等等,才有意义*> +124:0111 1100 -124:1000 0100 +125:0111 1101 -125 ...
- Java中基本数据类型byte的溢出问题
Java中基本数据类型byte的溢出问题 问题源于:https://www.cnblogs.com/HuoHua2020/p/12326631.html 定义两个byte类型的数据,将其之和赋值给一个 ...
随机推荐
- css : object-fit 兼容 ie 的解决方案
通过 github 搜索 object-fit ie , 借鉴大佬兼容 ie 的经验. 下载解压到文件夹 , 打开测试目录 , 查看 demo 使用 ie 打开demo , 查看显示效果 : 代码 ...
- Shell-循环-for-while
- [转帖]Linux内存管理(一)——从硬件角度看内存管理
从硬件角度看内存管理 ①.在操作系统还没有出来之前,程序都是被存放在卡片上,计算机读取一张卡片就运行一条指令.这种从外部存储介质上直接运行指令的方法效率很低 ②.单道编程的内存管理 所谓单道,就是整个 ...
- SQLServer性能优化之二
SQLServer性能优化之二 背景 优化了机器的硬件配置之后性能好了很多 但是偶尔还是会出现阻塞. SQL总是奇奇怪怪的. 其实第一天时就感觉可能是索引存在问题. 但是dbcc 重建所有数据库的索引 ...
- [转帖]Promethues + Grafana + AlertManager使用总结
Prometheus是一个开源监控报警系统和时序列数据库,通常会使用Grafana来美化数据展示. 1|01. 监控系统基础架 1|11.1核心组件 Prometheus Server, 主要用于抓取 ...
- [转帖]Jmeter笔记:使用Jmeter向kafka发送消息
https://www.cnblogs.com/daydayup-lin/p/14124816.html 日常工作中有时候需要向kafka中发送消息来测试功能或者性能,这时候我们怎么办呢?我之前是自己 ...
- [转帖]HTTP状态码、请求方法、响应头信息
https://www.cnblogs.com/pachongshangdexuebi/p/5279608.html HTTP状态码 当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求. ...
- [转帖]PostgreSQL配置文件--WAL
2022-12-23 3.1 Settings 3.1.1 fsync 字符串 默认: fsync = on 开启后强制把数据同步更新到磁盘,可以保证数据库将在OS或者硬件崩溃的后恢复到一个一致的状态 ...
- [转帖]Linux shell 单引号和双引号
https://www.cnblogs.com/airoot/p/15324883.html 在编写shell脚本的时候经常会用到引号,有些时候却老是忘记单引号和双引号之间的区别,所以就整理一下供以后 ...
- [转帖]微服务集成skywalking实现全链路日志追踪方案
目录 1.安装部署skywalking 1.1 环境准备 1.2 部署步骤 2.微服务整合skywalking实现链路监控 2.1 下载skywalking官方版本 2.2 将微服务引入skywalk ...