我们从零开始学习大数据技术,从java基础,到Linux技术涉猎,再深入到大数据技术的Hadoop、Spark、Storm技术,最后到大数据企业平台的搭建,层层递进,由点到面!希望技术大牛能过来指导学习。
上一节了解Java基础语法,本节我们开始学习Java基础-运算符,将会围绕以下几个知识点进行展开学习:
算术运算符
赋值运算符
比较运算符
逻辑运算符
位运算符
三元运算符
PS:开始之前我们先针对上节数据类型中补充的几个小问题
一、数据类型中补充的几个小问题
1、byte值的问题
byte b1=127;
byte b2=(byte)128; //-128
byte b3=(byte)129//-127
byte b3=(byte)130; //-126
byte的范围:-128 ~ 127
128: 10000000
-128:10000000(这里的1即是符号位,也是数值位)
2、数据类型转化之默认转换(遵循从小到大转换)
byte,short,char ---int ---long---float---double
long:8个字节
float:4个字节
虽然是默认转换,但因为以下原因,long默认转换为float
a、它们底层的存储结构是不同的。
b、float表示的数据范围比long的范围大
3、Java语言中的字符char可以存储一个中文汉字吗,为什么呢?
二、运算符

运算符总览表
在我们数学中也会经常用到运算(加减乘除等),那在Java程序中也是经常要做一些运算操作都有哪些呢,那么先看一下以下针对运算和运算符的定义:
运算:是对常量和变量进行操作的过程成为运算
运算符:是对常量和变量进行操作的符号称为运算符
分类(6种):算术运算符,赋值运算符,比较运算符,逻辑运算符,位运算符,三目运算符

那么,我们现在对各类运算符逐一的进行了解
符号:
+,-,*,/,%,++,--
注意事项:
a、整数相除只能得到整数,如果想得到小数,必须把数据变换为浮点数类型
b、/ 获取的是除法操作的商,% 获取的是除法操作的余数
下面我们先编写程序代码执行看下效果

程序执行结果:

A:单独使用:
B:参与运算使用:
C:作用:就是对变量进行自增或者自减。
程序举例:

放后面,程序打印出来的结果:

放前面,程序打印出来的结果

可见,我们前面总结的是对的。
接下来,我们进一步看一下+的用法(主要有三种):
A:加法
B:正号
C:字符串的连接符
程序举例:

程序执行结果:

可见:
* 运算规则是从左到右做运算的,"hello"+'a'+1 ,系统会先识别到hello是一个字符串,则后面的加号就是作为字符串连接符使用,与字符a连接后,形成一个新的字符串,再拼接1。
* 同样的,在'a'+1+"hello"则是先运算'a'+1(这里的加号是作加法使用),再连接字符串hello.
符号:
=,+=,-=,*=,/=,%=等
可以划分为以下两种:
基本的赋值运算符:=
扩展的赋值运算符:+=,-=,*=,/=,%=
+=把左边和右边做加法,然后赋值给左边
同理,-=,*=,/=,%=的用法参照上述说明
程序举例:

程序执行结果:

思考题:
接下来,来思考两个问题,
short s=1,s=s+1;
short s=1,s+=1;
判断上面两个代码有没有问题,如果有,哪里有问题?
编写程序代码验证下:
第一种:

程序执行结果:

注意:还记得,前面我们学的 short类型做运算的时候,默认是先转换成int类型,int类型占用4个字节数,short类型占用2个字节数,遵从从小到大的转换原则,所以本程序中s=s+1做运算会损失进度。
第二种:

程序执行结果:

可见,扩展的赋值运算符其实隐含了一个强制类型转换。
符号:
== 表示等于
!= 表示不等于
> 表示大于号
>= 表示大于等于
< 表示小于
<= 表示小于等于
特点:
注意事项:
程序举例:

程序执行结果:

可见,比较运算符对应的结果是Boolean类型的
符号:
基本用法:
特殊用法:
特点:
表达式:
算术表达式:a + b
比较表达式:a == b
结论:
(1)& 逻辑与:有false则false
(2)| 逻辑或:有true则true
(3) ^ 逻辑异或:相同为false,不同为true
^异或举例:
(4) !逻辑非:非false则true,非true则false
编写以下程序对上述几种逻辑运算进行验证:
程序举例:

程序执行结果:

可见,我们的结论是正确的,逻辑运算符的基本用法也都讲完了,下面我们看看特殊用法。
程序举例(双与&& 用法):

程序执行结果:

可见,&&与&的区别?||与|的区别?
||与|就不再多做代码演示,可以自行尝试验证:
注意:开发中常用的逻辑运算符:
符号:
& 与位运算
| 或位运算
^ 异或运算
~ 翻转运算
<< 左移运算
>> 右移运算
>>>无符号右移运算
注意:
案例:
通过下述案例,了解下位运算符的特点:

我们先分析下几条位运算符打印出来的结果:
分析: 因为是位运算,所以我们必须要把数据换算成二进制
3的二进制: 11
00000000 00000000 00000000 00000011
4的二进制:100
00000000 00000000 00000000 00000100
&位与运算:有0则0
00000000 00000000 00000000 00000011
& 00000000 00000000 00000000 00000100
---------------------------------------------
00000000 00000000 00000000 00000000
结果是:0
|位或运算:有1则1
00000000 00000000 00000000 00000011
| 00000000 00000000 00000000 00000100
-------------------------------------------------
00000000 00000000 00000000 00000111
结果是:7
^位异或运算:相同则0,不同则1
00000000 00000000 00000000 00000011
^ 00000000 00000000 00000000 00000100
---------------------------------------------
00000000 00000000 00000000 00000111
结果是:7
~按位取反运算:0变1,1变0
00000000 00000000 00000000 00000011
----------------------------------------------
~ 11111111 11111111 11111111 11111100 (补码)
补码:11111111 11111111 11111100
反码:11111111 11111111 11111011
原码:10000000 0000000 00000100
结果是:-4
通过分析执行程序代码,可见我们的分析是正确的:

*另外,针对^还有以下特点:
程序举例:

执行结果如下:

可见,^异或运算可以用于两个数值对调的运算,建议自行编写如下代码做验证:
a = a ^ b;
b = a ^ b;
a = a ^ b;
这个留给大家自己动手操作。
接下来,我们进一步看一下以下几种运算:
举例:

在执行运算之前,我们先做以下分析:
<<的移动:
首先,我们需要先计算出3的二进制:11
00000000 00000000 00000000 00000011
(00)00000000 00000000 00000000 00001100
--------------------------------------------------------
左移2位,结果为:12
>>的移动:
计算出24的二进制:11000
原码:10000000 00000000 00000000 00011000
反码:11111111 11111111 11111111 11100111
补码:11111111 11111111 11111111 11101000
1111111111 11111111 11111111 111010(00)
右移2位,最高位补1,生成新的补码
然后再通过以下方式求出原码,就是我们需要的结果。
补码:1111111111 11111111 11111111 111010
反码:1111111111 11111111 11111111 111001
原码:1000000000 00000000 00000000 000110
-----------------------------------------------------
结果是:-6
>>>的移动:
计算出24的二进制:11000
原码:10000000 00000000 00000000 00011000
反码:11111111 11111111 11111111 11100111
补码:11111111 11111111 11111111 11101000
0011111111 11111111 11111111 111010(00)
右移2位,最高位补0,生成新的补码
新的补码:0011111111 11111111 11111111 111010
程序的执行结果为:

可见,我们最终可以总结如下几点:
最后,还有一个三元运算符没讲,我们将放到下一节做专题说明。
往期文章:
从0开始学大数据-Java基础开篇(1)
从0开始学大数据-Java基础语法(2)
本人能力有限,如有不足,还望指正
感谢大家一如既往的支持
希望一起分享给更多的人
让大家一起学习大数据技术
