导读

本文适合Java入门,不太适合Java中高级软件工程师。

本文以《Java程序设计基础篇》第10版为蓝本,采用不断提出问题,然后解答问题的方式来讲述。

本篇文章只是这个系列中的一篇,如果你喜欢这种讲解方式,或者觉得从中能学到知识,可以关注我,以便查阅本系列其他文章。

本文是第二章的第2讲,如果想看第1讲,可以查看:

愉快地学Java语言:第二章基本程序设计 第1讲

8数值数据类型和操作

Java中有多少个数值类型,它们都是什么?

一共有六种数值类型,分类归纳为:

  • 整数:byte,short,int,long
  • 浮点数:float(单精度),doubl(双精度)

大家不禁会想标准IEEE754是什么?

IEEE 754 是美国电气电子工程师协会通过的一个标准,用于在计算机上表示浮点数。该标准已被广泛采用。Java采用32位IEEE 754表示float型,64位IEEE 754表示double型。

都支持哪些种类的操作呢?

支持加(+),减(-),乘(*),除(/),求余(或称取模,%)

要注意的运算要点有哪些呢?

  • 当除数都是整数时,除法结果是整数,小数部分舍弃。
  • 对于%,只有当被除数是负数时,余数才是负数。
  • 操作符%通常用在正整数上,它也可用于负整数和浮点值。只有当被除数是负数时,余数才是负的。
  • 两个浮点数值的相等测试并不可靠。应该测试两个浮点数的差小于某个阈值,来比较他们是否接近。

例:

double x =1.0-0.1-0.1

x==0.8//可能为false

此外,使用方法Math.pow(a,b)来计算a的b次幂。

9数值型直接量

前面我们了解了变量,那么下面的代码中出现的数字是什么呢?

int i =0;

它是直接量。直接量是一个程序中直接出现的常量值。

由于0数字,所以数值型直接量。

数值型直接量的要点包括:

  • 数值型直接量包括:整型直接量,浮点型直接量。
  • Long型的整型直接量要在数字后加字母L或l。
  • 二进制整型直接量以0b或0B开头,例:0B1111
  • 八进制整型直接量以0开头,例:07777
  • 十六进制整型直接量以0X开头,例:0XFFFF
  • 浮点型直接量要在数字后加字母F或f(folat型直接量),D或d(double型直接量)

整型直接量默认是int型的,指的是什么呢?

即,如果一个数字直接出现在代码中,其后没有字母,也不任何标志开头(0b,0B,0,0X开头),那么它表达整型值。

与此相似地,浮点型直接量默认情况下是double型的。

上面那个表格中,出现了3.4028235E+38这种表示法,那么它是什么呢?

它是科学记数法,用 aX10b的形式表示浮点型直接量。

2_3这种写法你见过吗?

它也表示数值型直接量。为了提高可读性,Java允许在两个数字之间使用下划线来表示数值型直接量。

10表达式求值以及操作符优先级

如何对表达式进行求值运算呢?

算数我们都会,其实算数运算规则也适用于表达式求值。

我们都知道,先算乘除,再算加减,那么有多个操作符的时候怎么算呢?

这涉及到运算符优先级的问题,先计算优先级高的,乘除优先级比加减优先级高。乘与除优先级相同,加与减优先级相同。

关于操作符的优先级可以列一个总表,但由于好多操作符目前还没有接触,所以暂且不列。

11增强赋值操作符

上面列举了所有的增强赋值操作符,那么为什么要使用它呢?

看下面这个例子:

int i = 10;

i = i - 1;

这个例子很简单,首先声明int型变量i,并初始化赋值10。然后,将i减1,再将结果赋给i。那么此时i的值是9.

有没有更简洁的写法呢?

当然有,i - = 1;

不过,也没简洁多少,只是少写了个字母i而已。

12自增自减操作符

看到命名,你想到了什么吗?

对了,操作符放到变量前面就是前置操作符,放到后面就是后置操作符。

有没有发现什么规律?

前置操作符使用变化后的值,后置操作符使用变化前的值。

例如,计算++i相当于计算i=i+1;这样i当前的值是原值加1后的结果。

13数值类型转换

什么是类型转换?

将一种数据类型的值转换为另一种数据类型的操作。

为什么要转换类型?

实际应用的需要,再者就是为了合理的存储数据。

先来看几个概念:

扩宽类型:将一个小范围类型的变量转换为大范围类型的变量。

缩窄类型:将一个大范围类型的变量转换为小范围类型的变量。Java自动扩宽数据类型,缩窄类型必须执行显示转换,如果不显示转换会出现编译错误。

能给个形象的比喻吗?

形象地说,扩宽类型就好比有11个人想进能容纳10个人的屋子,缩窄类型就好比能容纳10个人的屋子只进了9个人,前者无论如何也容纳不下第11个人,后者是对资源的浪费。

例如,显示转换

float f = 5.55f;

int i = (int)f;//此时i的值是5。

如果写成:float f = 5.55;呢?

那么一定会报编译错误,因为别忘了,浮点型直接量默认情况下是double型的,double精度高于float,double转换为float属于缩窄类型。

看到左侧的红叉了码,验证了我们的判断。把鼠标方在其上面,看看具体的信息:Type mismatch: cannot convert from double to float

那么在类型转换中还应该注意点什么呢?

  • 类型转换中,被转换变量不会被改变。
  • 形如x1 op= x2的增强赋值表达式,执行的实际是x1=(T)(x1 op x2),T是x1的类型。
  • 浮点型转换为int,小数部分会被截掉。

14常见错误

如果赋给变量的值,超过它的存储范围,会怎么样呢?

这种情形被称为溢出。超过变量所能承载的最大值、最小值算溢出。然而Java不会给出警告或者报错。产生的结果会获让人觉得奇怪。

例如,int型变量能存储的最大值是2147483647,最小值是-2147483648

若有下面的赋值表达式:

int i = 2147483647 + 1;

那么此时i的值是-2147483648

若有赋值表达式:

Int i = -2147483648 - 1;

那么此时i的值是2147483647。

每天30分钟,坚持一个月就能为Java开发打下坚实的基础!努力学习吧!

语言求余和乘除优先级_愉快地学Java语言:第二章基本程序设计 第2讲相关推荐

  1. java for循环_愉快地学Java语言:第五章 循环

    导读 本文适合Java入门,不太适合Java中高级软件工程师.本文以<Java程序设计基础篇>第10版为蓝本,采用不断提出问题,然后解答问题的方式来讲述.本篇文章只是这个系列中的一篇,如果 ...

  2. esp8266接收到的数据如何存放到数组中_愉快地学Java语言:第七章 数组

    导读 本文适合Java入门,不太适合Java中高级软件工程师.本文以<Java程序设计基础篇>第10版为蓝本,采用不断提出问题,然后解答问题的方式来讲述.本篇文章只是这个系列中的一篇,如果 ...

  3. easyloging 获取日志文件名字_愉快地学Java语言:第十五章 断言与日志

    导读 本文适合Java入门,不太适合Java中高级软件工程师.本文以<Java核心技术基础知识卷I>第10版为蓝本,采用不断提出问题,然后解答问题的方式来讲述.本篇文章只是这个系列中的一篇 ...

  4. java语言说法不正确的是_下列有关Java语言描述不正确的是()。 - 问答库

    问题: [单选] 下列有关Java语言描述不正确的是(). A . Java语言开发的程序与平台无关,即:用Java语言开发的程序可以在不同的操作系统下运行 B . Java采用完全面向对象的程序设计 ...

  5. java语言实现任何一种排序_请用java语言编写排序程序。

    展开全部 参考代码如下,可以按需求自己修改import java.util.Date; public class SortThread { public static void main(String ...

  6. java方法区内存泄露_深入理解java虚拟机-第二章:java内存区域与内存泄露异常...

    2.1概述: java将内存的管理(主要是回收工作),交由jvm管理,确实很省事,但是一点jvm因内存出现问题,排查起来将会很困难,为了能够成为独当一面的大牛呢,自然要了解vm是怎么去使用内存的. 2 ...

  7. java语言与其他语言的区别是_浅谈Java语言和其他语言的区别

    计算机语言中,各种语言都有自己的优势与劣势.本人是在大学期间就学习Java的,听到了过多Java不好的地方,但是Java在近20年里何以独步天下呢?Java语言和其他的语言之间到底有什么区别呢? 学习 ...

  8. c语言使用求余方式的转化为二进制程序,C语言第三讲 程序结构 (下).ppt

    <C语言第三讲 程序结构 (下).ppt>由会员分享,可在线阅读,更多相关<C语言第三讲 程序结构 (下).ppt(24页珍藏版)>请在人人文库网上搜索. 1.1,第三讲 程序 ...

  9. c语言求3个整数的平均数程序,c语言求余(c语言求任意三个数的平均值)

    C语言提供了一个取余数的运算符%,称之为"模"运算符.只有两个整数之间才可以进行模运算!a % b 表示 用b来整除a,商整数,得到余数.如:5%3 = 2 4%3 =13%3 . ...

最新文章

  1. skyline B/S模式下脚本实现输出视频
  2. linux 内核生成
  3. 为什么我电脑进入睡眠后网络就断开了?(解决打开睡眠后的笔记本无法连接校园网的问题)
  4. file的getPath getAbsolutePath和getCanonicalPath的不同
  5. python约瑟夫环_Python实现约瑟夫环问题的方法
  6. html二级页面内容滑动,jQuery+CSS实现的网页二级下滑菜单效果
  7. 反向输出一个三位数(信息学奥赛一本通-T1031)
  8. [Chrome]查看内存使用命令
  9. MySQL用户管理和权限设置
  10. python36.dll下载_python36.dll
  11. 利用深度学习自动补全 Python 代码,这个开源项目有点牛逼
  12. IE 6里面当高度(height)小于9px时,高度会仍然是9px[解决办法]
  13. IP地址、子网掩码、有效子网数、有效主机数
  14. 平安人寿打造新一代年金保险产品:御享财富和御享金瑞
  15. 帆软报表参数传给网络报表_在报表中给session赋值实现报表间参数共享
  16. 图像增强(1-灰度级变换)—内涵MATLAB源码
  17. 《第一桶金怎么赚——淘宝开店创业致富一册通》一一1.1 创业者需具备的素质...
  18. 听音测试电脑软件,主观听音测试
  19. Mysql给一个大表加一列_MySQL 大表添加一列的实现
  20. 俞敏洪演讲:不要为眼前的得失而抓狂 zt

热门文章

  1. SQLITE_ERROR - table sap_capire_bookshop_books has no column named currency
  2. 一些能提高ABAP开发人员日常工作效率的ABAP小工具
  3. Angular Component TypeScript代码和最后转换生成的JavaScript代码比较
  4. promolike原型开发前后台打通
  5. 使用Hybris Commerce API返回当前客户持有的所有优惠券
  6. SAP UI5 ResponsiveGridLayout
  7. How change in Console is rendered back into UI
  8. CDS view delivered in CRM EHP4
  9. ABAP document read logic
  10. SAP CRM Service Order search Tool