背景:
大家都知道,低精度的数字转换为高精度的数字是没有问题的,但是高精度的数字转换低精度的数字会精度受损。那精度是怎样受损的?转换的逻辑是怎样的了?以下为个人的猜想。
先上代码,1个short类型的数字,转换为byte类型的数字
@Test public void LongToInt(){ short c = 428; byte e = (byte)c; System.out.println("c to e :" +e); }
分析:
在计算机内存中,所有的数据都是以二进制方式进行计算的。数字运算也不能列外。就以二进制为思路。
short在java中 占用两个字节,二进制为16位的0和1。
比如:short c = 428 对应的二进制为 0000000110101100。
byte 在java中占用1个字节。
两个字节的short类型转换为1个字节的byte类型,是怎样转换的了?
个人猜想,把short的第一个字节去掉,还剩1个字节,把剩余的字节赋值给byte,那么0000000110101100去掉第一个字节的8位,剩下的字节为10101100,java中又是有符号数,一看最高为1,得用补码计算。最高位不变,其他位0变成1,1变成0,然后再加1,最后的二进制位11010100,最高位表示符号位,不进行计算,剩余的1010100转换为10进制为84,再加上符号位,最后的结果就是 -84了。
总结:
高精度的数字转换为低精度的数,把超过低精度字节的长度,从高精度高位字节去掉,转换为符合低精度的字节长度。
比如8字节的long,转换为4字节的int,把long的前4个字节去掉,剩余4个字节赋值给int,需要注意是否进行补码转换。
相关推荐
Java高精度计算Java高精度计算Java高精度计算Java高精度计算Java高精度计算Java高精度计算Java高精度计算Java高精度计算Java高精度计算Java高精度计算Java高精度计算Java高精度计算
Java高精度计算文件,很好用!!!非原创,特此向代码原作者致敬
关于java 中高精度计算的问题。包含加、减、乘、除等运算
Java自定义实现本地语言与ASCII之间的互相转换。可在开发项目中直接调用的工具类。
浮点数和十六进制数的相互转换,包括:1.单精度浮点数(32位)和十六进制数的相互转换,2.双精度浮点数(64位)和十六进制数的相互转换。
使用Java,double 进行运算时,经常出现精度丢失的问题,总是在一个正确的结果左右偏0.0000**1。 特别在实际项目中,通过一个公式校验该值是否大于0,如果大于0我们会做一件事情,小于0我们又处理其他事情。 这样的...
这是偶学习Java以来设计的第一个小程序,功能构造、界面……虽不华丽,但作为处女作,还是值得分享下,欢迎大家挖掘BUG,谢谢。^_^
java程序中数值的精度问题,float、double容易产生精度数值问题,不适合精度计算,而bigdecimal正好解决这一问题
采用java.swt编写的计算器界面,corejava实现高精度计算的程序
JAVA计算器小程序(多进制计算、转换) 包含 2进制 8进制 10进制 16进制数的计算,转换
该软件可以把c语言文件转换为java语言文件
smali2java工具——直接将smali转换成java,在网上找了很久才找到了,方便后来人。
单双精度浮点数与十六进制双向转换工具,单双精度浮点数与十六进制双向转换工具,单双精度浮点数与十六进制双向转换工具
Java小数精度、时间格式和类型转换
16进制单精度(32位)浮点型转换器,含有大端(左高位)、小端(右高位)
考试内容: 一、 Java语言的特点和实现机制 二、 Java体系结构 1. JDK目录结构。 2. Java的API结构。 3. 开发环境设置。 4. Java程序结构。 三、 Java语言中面向对象的特性。 1. 面向对象编程的基本要领和特征。 2. ...
将java的日期转换成中文的日期,可以直接使用的源文件。
帮助开发用于计算坐标转换中的七参数
自己做的小demo,实现格式转换,java语言