.net byte转java byte_Java 最小值之谜
(给ImportNew加星标,提高Java技能)
编译:ImportNew/覃佑桦
programming.guide/java/minus-min-value.html
出人意料的是,下面两个表达式的计算结果居然为 true:
-Integer.MIN_VALUE == Integer.MIN_VALUE // true-Long.MIN_VALUE == Long.MIN_VALUE // true而 Byte 和 Short 的结果看起来和预期的一样:-Byte.MIN_VALUE == Byte.MIN_VALUE // false-Short.MIN_VALUE == Short.MIN_VALUE // false
这背后究竟发生了什么?
分析
Java 用两个补码表示整数。用这种表示方法,value 在起点不对称。负数的个数比正数少。最小负数没有对应的正数!例如:
Integer.MIN_VALUE 等于 −231
Integer.MAX_VALUE 等于 +231−1
尝试对 −231 取反时,会得到 231 超出最大整数,因此会发生溢出变为负数。
示例:
换句话说,Integer.MIN_VALUE等于对自己取反。这也会引起其它意外情况,例如 Math.abs(Integer.MIN_VALUE),的实现为x < 0 ? -x:x,会回负值。
那么 byte 和 short 会怎么样?
byte 和 short 也是用两个补码存储。但是,Java 不会直接对 byte 和 short 进行算术运算。相反,它们会先被提升为 ints,然后进行取反。
假设 b 是 byte,那么 -b 等价于 –((int) b)。
通过两个重载方法可以很好地进行说明。
void m(byte b) { System.out.println(“A byte”); }void m(int i) { System.out.println(“An int”); }
按照下面进行调用:
byte b = 0;m(b); // Prints “A byte”m(-b); // Prints “An int”
因此,-Byte.MIN_VALUE 等于128,但类型为 int。如果把结果转回 byte(最大值为127),将翻转并变为−128,与 int 和 long 的情况一样:
(byte) -Byte.MIN_VALUE == Byte.MIN_VALUE // true(short) -Short.MIN_VALUE == Short.MIN_VALUE // true
示例:
推荐阅读 点击标题可跳转
Java 实现贪心算法实例介绍
Java 异步编程:内置功能与三方库
Java 并发:使用 AtomicReference 处理竞态条件
看完本文有收获?请转发分享给更多人
关注「ImportNew」,提升Java技能
好文章,我在看❤️
.net byte转java byte_Java 最小值之谜相关推荐
- .net byte转java byte_Java Web安全 || Java基础 Java Agent
点击上方"凌天实验室","星标或置顶公众号" 漏洞.技术还是其他,我都想第一时间和你分享 " [历史]已连载更新全部内容:[菜单栏]-[JAVA SE ...
- 解析Java横死之谜,气定神闲看花开花落
Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 原创:小姐姐味道(微信公众号ID:xjjdog),欢 ...
- java byte_Java byte数据类型详解
public static String bytes2HexString(byte[] b) { String ret = ""; for (int i = 0; i < b ...
- java list 最小值_Java 实例 – 查找 List 中的最大最小值
Java 实例 - 查找 List 中的最大最小值 以下实例演示了如何使用 Collections 类的 max() 和 min() 方法来获取List中最大最小值: /* author by w3c ...
- C的无符号数据类型int,short,byte 转为 Java对应的数据long,char,short
//从网络中读取C的无符号int,short,byte字节数组,相应转换成java的long,char,short short anUnsignedByte = 0; char anUnsignedS ...
- .net byte转java byte_CVE20200688的武器化与.net反序列化漏洞那些事
0x00 前言CVE-2020-0688是Exchange一个由于默认加密密钥造成的反序列化漏洞,该漏洞存在于Exchange Control Panel(ecp)中,不涉及Exchange的工作逻辑 ...
- java栈最小值的实现,关于java:算法图解如何找出栈中的最小值
后面咱们学习了很多对于栈的常识,比方<动图演示:手撸堆栈的两种实现办法!>和<JDK 居然是这样实现栈的?>,那么接下来咱们再来刷一些对于栈的经典面试题以坚固学过的常识. 咱们 ...
- Java翻译byte数据,java学习|图说String(二):基于byte数组的String方法调用
基于byte数组的String方法调用 上文说到,String的方法调用都是基于byte数组,其实说更详细点:都是基于String中value字段的调用: 注,本文中所有的源码均基于jdk11 通过上 ...
- Java最大值最小值问题(用户输入)
前言:做编程题遇到的问题,对思路有较好启示 目录 输入的值较少 输入的值较多 方法一(循环) 方法二(Arrays.sort排序)(值较少时也可以用) 输入的值较少 当输入的值较少时, ...
最新文章
- python制作ios游戏_python自动化生成IOS的图标
- python redis用法详解
- NRF51 BOOTLOADER 编译注意事项
- require.js的用法
- Windows Presentation Foundation (WPF)中的命令(Commands)简述
- 计算机行业人员的鄙视链
- ARM的流水线与PC值的关系
- Unity项目代码书写规范
- 让IE和Firefox(包括chrome)浏览器默认产生滚动条的滚动槽
- 【Python】基本统计值计算
- 汉文博士 0.5.7.2356 版发布
- SQL Server 连接查询(多表连接查询)
- java留言板源码_jsp留言板示例源码下载(入门级)
- 格雷码和二进制之间的转换
- 线性规划——单纯形法
- 百度地图设置显示定位服务器,百度地图API示例之设置地图显示范围
- revit二次开发 IdlingExternalEvent 空闲事件与外部事件
- 本世纪最好的NSA!
- 数学分析笔记-有限覆盖定理
- ThinkPHP6集成腾讯云、短信宝短信发送的工具类