写在前面

本文章转载于我的个人blog UltraFisher,欢迎大家浏览: https://ultrafisher.github.io

原文链接:https://ultrafisher.github.io/2020/08/15/Java%E5%AD%A6%E4%B9%A0%E9%87%8D%E9%9A%BE%E7%82%B9%E8%AE%B0%E5%BD%95/

BYTE数据类型简介

byte是四个整数类型(byte、short、int、long)中取值范围最小的整型数据类型,具体如下:

数据类型转换

数据类型转换分为隐式转换和显式转换(也称强制类型转换)

隐式转换指的是低精度数据类型向高精度数据类型转换,数据不会溢出,并且一定成功,如下:

输出结果为:

显式转换(也称强制类型转换) 指的是高精度数据类型转换向低精度数据类型,转换时可能会造成数据精度损失,如下:

输出结果为:

BYTE类型显式转换时超出其取值范围

若我们运行以下代码:

输出结果为:

因为byte数据类型的取值范围是-128~127,以上例子中被转换的数值为129,已经超出了byte数据类型的取值范围,所以不能正常显示为129,而现实了看似奇怪的-127.

其实,-127并不是凭空出现的,而是因为byte数据类型对于超出其取值范围的强制类型转换有特殊的处理过程。

步骤为:1.保留被转换数值补码的低字节部分;

2.将保留下来的部分转换成源码。

(这里不会对源码,反码,补码等概念进行讲解,若不了解的,请自行搜索)

接下来以129为例:第一步 保留被转换数值补码的低字节部分

129的源码为 0…0 1000 0001(源)

保留其低字节部分后为:

1000 0001(源)第二步 将保留下来的部分转换成源码

因为程序是以补码处理数值的,所以上一步中的1000 0001(源)将会被看成补码1000 0001(补)

接下来将补码还原成源码:

1000 0001(补) >>> 1000 0000(反) >>> 1111 1111(源)

1111 1111(源) 即为-127(1111 1111(源) 的最高位是符号位,1表示负数,余下的 111 1111 即为十进制的127,所以1111 1111(源) 为-127)

所以以上步骤解释了byte a = (byte)129;的输出结果为-127。

写在最后

在研究过程中发现,其实源码、反码、补码中可以深挖的东西还有好多,都十分有趣,之后也会记录。

最后,希望大家一起交流,分享,指出问题,谢谢!

本文章转载于我的个人blog UltraFisher,欢迎大家浏览: https://ultrafisher.github.io

原文链接:https://ultrafisher.github.io/2020/08/15/Java%E5%AD%A6%E4%B9%A0%E9%87%8D%E9%9A%BE%E7%82%B9%E8%AE%B0%E5%BD%95/

java当数值超过byte时_【Java学习重难点记录】byte数据类型在显式类型转换时超出其取值范围的转换过程...相关推荐

  1. Java 中的基本数据类型有几种,如何表示,取值范围以及注意事项? 数据类型的种类

    1. Java 中的基本数据类型有几种,如何表示,取值范围以及注意事项? 数据类型的种类 一个字节是8字符 public class test_609 { public static void mai ...

  2. 当 IDENTITY_INSERT 设置为 OFF 时,不能为表中的标识列插入显式值

    {"当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'OrderList' 中的标识列插入显式值"} 对于这个异常可以从两个角度来处理:A:数据库执行语句  B: ...

  3. 仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表中为标识列指定显式值问题...

    今天在处理数据库过程中碰到这样的问题在插入一条数据到表中 系统报这样的错误 仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表中为标识列指定显式值问题 表有一列是自增长的 ...

  4. java当数值超过byte时_java试题及答案

    java试题及答案 java是面向对象的语言,那么java认证有哪些常见试题呢?下面跟yjbys小编一起来看看最新java认证考试试题及答案,仅供大家参考! 1.一个".java" ...

  5. java期末判断题题库_(java期末考试选择题题库.doc

    (java期末考试选择题题库 1.分析以下程序: 1)public class x{ 2)public static void main(String[]args){ 3)String ol=new ...

  6. java技术的核心是哪个_[JAVA]《Java 核心技术》(一)

    1. unicode编码表 utf-8和unicode的互换问题 2. subString(a,b) 获得 [a,b-1]的子串 3. 易犯错误,java没有引用传递 4. ==         比较 ...

  7. Java格式化日期用斜杠_[java工具类01]__构建格式化输出日期和时间的工具类

    在之前的学习中,我写过一篇关于字符串格式化的,就主要设计到了时间以及日期的各种格式化显示的设置,其主要时通过String类的fomat()方法实现的. 我们可以通过使用不同的转换符来实现格式化显示不同 ...

  8. java get post 区别详解_[Java教程]GET 与 POST 其实没有什么区别

    [Java教程]GET 与 POST 其实没有什么区别 0 2020-12-30 11:36:20 GET 与 POST 其实没有什么区别 本文写于 2020 年 12 月 30 日 GET 与 PO ...

  9. java监听变量的变化_[Java学习小记]使用PropertyChangeSupport来监听变量的变化

    最近开始要着手写一个web项目 ,之前没怎么 写过Java ,所以觉得蛮有必要把每天学习到的一些知识点或者解决的一些问题给记录下来 .一来供自己在整理过程中掌握巩固,二来也为以后再次出现该问题时能快速 ...

最新文章

  1. 用thttpd做Web Server
  2. RMAN无法删除归档日志
  3. typedef 字符串_typedef在C中使用字符数组(定义别名来声明字符串)的示例
  4. ios信号从4g变成无服务器,苹果信号满格显示是4g却没网络
  5. hadoop3.1.2版本中FsImage与Editslog合并解析
  6. linux输入子系统
  7. fastdfs笔记_fastdfs基于group的扩容
  8. matlab 释放变量,怎么能释放已经使用的内存
  9. SQL Server索引超出了数组界限解决方法
  10. mysql rds 迁移_如何实现迁移RDS for MySQL数据到本地 MySQL
  11. 硬件加速 | 基于FPGA的深度学习CNN加速器设计(论文复现)
  12. Eplan教程——利用在线帮助系统解读项目检查错误消息
  13. MongoDB secondary节点
  14. 9月25日百度大脑开放日人像特效专场火热报名中!
  15. 我国高分系列卫星遥感影像介绍
  16. 网站采集器,网站采集工具(图文教程)
  17. 什么是百度转码?如何禁止网站百度转码?
  18. 计算机存储—大话存储II读书
  19. 蓝桥杯单片机——数码管的动态显示(4)
  20. excess elements in scalar initializer

热门文章

  1. 极域电子教室系统 远程桌面 打不开 连不上 删除GATESRV.exe MasterHelper.exe
  2. PID控制参数整定(调节方法)原理+图示+MATLAB调试
  3. 什么是构造函数,什么是析构函数,作用是什么?
  4. Win10的两个实用技巧系列之麦克风音量乱跳、网络连接问题
  5. CEO、COO、CFO、CTO、CIO、CBO、CDO……日常必知
  6. sas应用入门(7.2)—— 平稳时间序列分析(建模)(精)
  7. Linux查看log日志命令总结
  8. 如何在 Creator3D 中切换模型贴图,超级简单!
  9. keil551的芯片包不能用_r语言中使用Bioconductor 分析芯片数据
  10. java计算机毕业设计物流站环境监测系统源码+lw文档+系统+数据库