整形:

int 4字节

short 2字节

long 8字节

byte 1字节

int的大小差不多是20亿。

整形计算

如果两个int进行加减乘除数学运算的时候,最终的结果仍然是int,有可能出现了溢出,那么结果就不是我们想要的了。如下:

System.out.println("Integer.MAX_VALUE: " + Integer.MAX_VALUE);

//两个int相加 结果仍然是int 溢出

System.out.println("Integer.MAX_VALUE - Integer.MIN_VALUE: " + (Integer.MAX_VALUE - Integer.MIN_VALUE));

//两个int相加 结果仍然是int 溢出

System.out.println("Integer.MAX_VALUE + 1 : " + (Integer.MAX_VALUE + 1));

//int + long 结果是long 没有溢出

System.out.println("Integer.MAX_VALUE + 1L: " + (Integer.MAX_VALUE + 1L));

//int + long 结果是long 没有溢出

System.out.println("(long)Integer.MAX_VALUE + 1: " + ((long)Integer.MAX_VALUE + 1));

输出:

Integer.MAX_VALUE: 2147483647

Integer.MAX_VALUE - Integer.MIN_VALUE: -1

Integer.MAX_VALUE + 1 : -2147483648

Integer.MAX_VALUE + 1L: 2147483648

(long)Integer.MAX_VALUE + 1: 2147483648

当然,long相加也有这种情况。

两个int进行除法运算,得到的结果是int,不是四舍五入,而是直接截断。其他整形也是一样。

int除法,如果除数是0,那么将会报java.lang.ArithmeticException错误。其他整形也是一样。

long后缀L。

16进制:前缀0x

8进制:前缀0

尽量不要使用8进制。

java没有任何无符号类型。unsigned type。

浮点型:

float:4字节

double:8字节

关于浮点数:

浮点数是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学计数法。

一个浮点数a由两个数m和e来表示:a = m × b^e。在任意一个这样的系统中,我们选择一个基数b(记数系统的基)和精度p(即使用多少位来存储)。m(即尾数)是形如±d.ddd...ddd的p位数(每一位是一个介于0到b-1之间的整数,包括0和b-1)。如果m的第一位是非0整数,m称作规格化的。有一些描述使用一个单独的符号位(s 代表+或者-)来表示正负,这样m必须是正的。e是指数。

结构

由此可以看出,在计算机中表示一个浮点数,其结构如下:

阶码部分(定点整数)

int是精确的,一个n位的精确存储只能存储2的n次方,因为有正负和0,所以int的取值范围是负2的n次方到2的n次方-1。

float的取值范围是3.4028235E38,有效数字6-7位,以F结尾,double的取值范围是1.7976931348623157E308,有效数字15位,以D结尾。

float是不精确的,所以有有效数字的概念,如float有32位,其实是和int是一样的。int的最大值是2147483647,从十进制来讲,只有10位,float的位数中,一部分要用来定义阶码部分,留给表示位数部分的位数就减少了,划算成10进制,那么能存储的有效数字也就6-7位。如果超过有效位数,那么就不精确了。如123456789123456789和123456789120000000用float来存储,在其实都是123456789120000000f,也就是说超过6-7位精度的部分丢失了。如下:

System.out.println(123456789123456789f);

System.out.println(123456789120000000f);

结果:

1.23456791E17

1.23456791E17

具体分析,来自网上:

一个float4字节32位,分为三部分:符号位,指数位,尾数位。

(1).符号位(S):最高位(31位)为符号位,表示整个浮点数的正负,0为正,1为负;

(2).指数位(E):23-30位共8位为指数位,这里指数的底数规定为2(取值范围:0~255)。这一部分的最终结果格式为:2E−127,即范围-127~128。另外,标准中,还规定了,当指数位8位全0或全1的时候,浮点数为非正规形式(这个时候尾数不一样了),所以指数位真正范围为:-126~127。

(3).尾数位(M):0-22位共23位为尾数位,表示小数部分的尾数,即形式为1.M或0.M,至于什么时候是1,什么时候是0,则由指数和尾数共同决定。 小数部分最高有效位是1的数被称为正规(规格化)形式。小数部分最高有效位是0的数被称为非正规(非规格化)形式,其他情况是特殊值。 最终float的值 = (−1)S∗(2E−127)∗(1.M)。

float的尾数:23位,其范围为:0~223,而223=8388608=106.92,所以float的精度为6~7位,能保证6位为绝对精确,7位一般也是正确的,8位就不一定了(但不是说8位就绝对不对了),注意这里的6~7位是有效小数位(大的数你先需要转换成小数的指数形式,例如:8317637.5,其有效小数位:8.3176375E6,七位),而有效位(从第一个不为0的开始数)是7~8位,是包括整数位的,像8317637.5,你不转换,则要从有效位的角度来看,有8位有效位。

因为float只有6-7位有效数字,假如说咱们考虑为7位,所以平时使用的时候,应该是9999999这个大小内是有效的,大约999万,如果要有两位小数的话,那么就是99999.99,就只有10万了。

一旦超过了这个范围,就要开始损失了,损失从右侧开始的,右侧的数字慢慢变成了0.如12345678.92就变成了12345679.00。

double的精度是15位,对应所有的非精确运算一般都够了。

浮点型计算

浮点数的运算和整形差别很大,有一些特殊的逻辑。

浮点数有三种特殊的值,对于float来说有:

Float.POSITIVE_INFINITY:正无穷大

Float.NEGATIVE_INFINITY:负无穷大

Float.NaN:非数字

除数为0,结果为无穷大。

0f/0f,或者负数的平方根结果为NaN。

溢出:超过Float.MAX_VALUE太多,就变成了Float.POSITIVE_INFINITY,小于Float.MIN_VALUE太多,就变成了Float.NEGATIVE_INFINITY。这里说太多,是因为溢出不太多的话,float是识别不到的,得到的结果还是Float.MAX_VALUE。如下:

package com.zjf;

public class Test {

public static void main(String[] args) {

System.out.println(Float.MAX_VALUE);

System.out.println(Float.MAX_VALUE + 10000);

System.out.println(Float.MAX_VALUE * 2);

System.out.println((double)Float.MAX_VALUE * 2);

System.out.println(Float.MAX_VALUE * 2D);

System.out.println(Float.POSITIVE_INFINITY);

System.out.println(Float.NEGATIVE_INFINITY);

System.out.println(0f/0f);

System.out.println(10f/0f);

}

}

结果如下:

3.4028235E38

3.4028235E38

Infinity

6.805646932770577E38

6.805646932770577E38

Infinity

-Infinity

NaN

Infinity

boolean类型

java的布尔值和整型值之间不能做转换。也就是说0不代表false。这点和c++不一样,和JavaScript也不一样。

运算符

+ - * / %(求余)

在进行这些操作的时候,两个都是整形的话代表整数操作,结果也是整数,否是是浮点数。

ps:可移植性是java语言的设计目标之一。但是java的浮点运算在不同的处理器上的的结算结果是有差别的(特别是intel和非intel处理器之间的差别)。

java的逻辑运算符&&和||是按照"短路"方式求值的。

强制转换

整数可以强制装换为浮点数,但是可能会损失精度,但是在有效数字范围内的部分还是准确的。

浮点数可以强制装换为整数,是采用的直接截断的方式。不是四舍五入。

浮点数可以强制装换为整数,如果超过了整数的取值范围,那么结果是不可预知的。

package com.zjf;

public class Test {

public static void main(String[] args) {

float f = 1234567891234.23F;

int i = (int)f;

long l = (long)f;

System.out.println(i);

System.out.println(l);

}

}

结果:

2147483647

1234567954432

事实上,不只是浮点型和整形的转换,java中数值的转换,如果转换的结果超过了接收方的取值范围,就可能得到一个完全不同的值。

java整型和浮点型_Java基本的程序结构设计 整形和浮点型相关推荐

  1. java 整型类型_Java基本类型-整型解读

    java的基本类型包括以下几类: 整型 byte short int long 浮点型 float double 字符型 char 布尔型 boolean 它们都有对应的包装类型(如果没有特殊说明,下 ...

  2. java整型缓存_java整型缓存

    缓存大家应该都听说过,像计算机中的缓存用于提高计算机性能,浏览器的缓存会在下一次访问该网站时一定程度上提高访问速度.通常缓存是用空间换时间,那么java中既节省了内存又提高了效率的缓存大家是否知道呢? ...

  3. java整型缓存_JAVA整型包装类的缓存策略

    Java Integer的缓存策略 public classJavaIntegerCache {public static voidmain(String... strings) { Integer ...

  4. java编程文件传输_JAVA文件传输程序

    源代码已经上传了. 第3章      设计文档 3.1       任务概述 本项任务要开发一款P2P文件传输软件,该软件可以在局域网和互连上使用,具有文件传输,断点续传,多线程连接等功能. 3.1. ...

  5. java 多线程 变慢_java多线程并发程序执行慢有什么原因?该怎么解决?

    我们在执行java多线程并发程序时有时候会碰到执行特别慢的场景,小伙伴们知道是什么原因导致的吗?它要怎么解决呢?下面小编就为你讲讲. 前提:在某地需要开发一个应用系统,此系统主要功能是能够让一些中小型 ...

  6. java验证码源码_Java通用验证码程序及应用示例(提供源码下载)

    评论 # re: Java通用验证码程序及应用示例(提供源码下载) 2009-11-27 17:09 零全零美 多谢博主写出这么好的总结,如果能加上汉字验证码,会更完美!  回复  更多评论 # re ...

  7. java调用matlab 数组_JAVA调用matlab程序 输入输出数据转换

    JAVA调用matlab程序 输入输出数据转换 JAVA 程序调用 matlab函数(matlab导出jar包里的函数).JAVA解析matlab返回数据时,机器需要先安装matlab运行时环境 并 ...

  8. java 字符串去掉换行_java第一个程序quot;helloworldquot;

    大家好,本系列文章分解讲解,分为初级,中级,高级,框架,实战项目,中间件,web前端等等. 这一篇讲解java语言初级基础: 编译运行第一个程序HelloWorld 一:环境变量配置 步骤 1 : 首 ...

  9. java 过滤xss脚本_Java Web应用程序的反跨站点脚本(XSS)过滤器

    java 过滤xss脚本 这是为Java Web应用程序编写的一个好简单的反跨站点脚本(XSS)过滤器. 它的基本作用是从请求参数中删除所有可疑字符串,然后将其返回给应用程序. 这是我以前关于该主题的 ...

最新文章

  1. 【驱动】在内核源码中添加驱动程序
  2. 在Python中调用C++,使用SWIG
  3. 96.总线里的异步通信
  4. VTK:vtkBalloonWidget用法实战
  5. rocketmq 启动_016【windows版Rocketmq】小白学习Rocketmq单机部署
  6. java中n次方怎么表示_java如何计算一个数的n次方
  7. hbase 监控指标项
  8. 初涉springboot(一)
  9. java expression 强制出现_Java中带有强制括号对的单行循环
  10. ListControl
  11. 虹软人脸识别android源码demo,虹软2.0 离线人脸识别 Android 开发 Demo
  12. CSP -- 运营商内容劫持(广告)的终结者
  13. 计算机二级大题知识点汇总,计算机二级office复习知识点「汇总」
  14. Python :文本数据挖掘并绘制词云图
  15. 微软中国CEO梁念坚 : Windows Phone有四大优点
  16. 感谢米老师,感谢提高班,做个骄傲的自己
  17. 中国古代经典励志名言100句,百读不厌,陪孩子一起读经典!
  18. 判断极值点是极大值还是极小值
  19. Java 实现XOR(异或)校验
  20. 测试工作挺枯燥的,怎么能够解决这个问题?

热门文章

  1. opencv的两个错误
  2. python 多线程并发怎么还是顺序执行_python thread 并发且顺序运行示例
  3. 知道接口地址 如何传数据_如何选显示器连接线?四种主流接口要知道
  4. swift 打开第三方应用_iOS卡通人物帧动画入门9(大结局):番外篇-扩展第三方类
  5. java rx.observable_Rxjava2 Observable的条件操作符详解及实例
  6. (fofa信息收集骚操作)windows查看文件的md5值
  7. gmat阅读.html,GMAT阅读长难句50句+参考译文.pdf
  8. scss-!optional
  9. web前端常用知识点
  10. 前端程序员容易忽视的一些基础知识