java运算符
来源:互联网 发布:树莓派 opencv python 编辑:程序博客网 时间:2024/04/30 06:40
1.赋值运算符
= , +=, -=, *=, /=, %=
a+=b 可以想象成 a=a+b;
变量声明完了之后,可以使用赋值语句(assignment statement)给变量赋一个值,Java中使用等号(=)作为基本的赋值运算符(assignment operator),
格式如下:
变量我们已经知道如何声明,表达式具体如何定义?
表达式的定义:
表达式涉及到值(常量),变量和通过运算符计算出的值,以及他们组合在一起计算出的新值。
x =y+1;
例如:
赋值运算符小问题
2.比较运算符
如何比较两个值?使用比较运算符 3和5谁大,在java中如何比较?
比较运算符比较的两边操作数,结果都是boolean的,只有true和false两种结果。
注意的细节:
2. 1.使用比较运算符的时候,要求两种数据类型必须一致。
byte、short、char 会自动提升至int。
2. 2.两个不同类型的数据是否可以比较呢?
答:可以的,但是两个不同类型的数据必须是兼用的数据。
3.逻辑运算符
什么是逻辑运算符?连接比较运算符的符号称之为逻辑运算符。那么为什么要连接比较运算符? 举例:当你去公司应聘,招聘要求,男性(判断为真),并且开发经验1年(判断为假)那么,我们还适合去面试吗,不能,因为只满足了一项,总体是不满足的(总体结果为假)。
逻辑运算符用于对boolean型结果的表达式进行运算,运算的结果都是boolean型。我们的比较运算符只能进行一次判断,对于对此判断无能为力,那么逻辑运算符就可以经将较运算符连接起来。
逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 。
“&”和“&&”的区别:单与时,左边无论真假,右边都进行运算;双与时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,双或时,左边为真右边不参与运算。
“ ^ ”异或与“|”或的不同之处是:当左右都为true时,结果为false。
& 与 | 或 ^ 异或 ! 非
3.1、& 与
总结 & 符号特点
& : 只要两边的boolean 表达式结果,有一个false.那么结果就是false
只有两边都为true ,将结果为true.
3.2、| 或
总结 | : 两边只要有一个为真结果就为真,当两边同为假时结果才为假.
3.3、^ 异或
^ : 两边相同结果是false
两边不同结果是true;
3.4、! 非
3.5、&& 短路
研究发现,&运算只有两边全为真的时候,结果才为真,那么当左边为假的时候就没有必要在进行判断,&&就产生了。
int a =4;
a >3 && a< 6;
a >3 & a< 6 ;
在这种情况下是没有区别的
如果:
a =2
a >3 & a< 6 2大于 3 为假, 接着运算 2 小于6 为真,总的结果为假
a >3 && a< 6; 此时a 不大于3 结果为false 右边不运算了.即短路.所以&& 比& 效率稍微高了一点.
4 。位运算符
按位操作符用来操作整数基本数据类型中的单个比特(bit),就是二进制,按位操作符会对两个参数中对应的位(bit)执行布尔运算,最终生成一个结果。按位操作符来源于C语言面向底层的操作,Java设计的初衷是嵌入式电视机机顶盒,所以面向底层的操作也保留了下来。
任何信息在计算机中都是以二进制的形式保存的,”&”、“|”、“^”除了可以作为逻辑运算符也可以作为位运算符。位运算是直接对二进制进行运算。他们对两个操作数中的每一个二进制位都进行运算。例如int是由32个二进制数组成,因此使用位运算符可以对整数值的二进制数进行运算。
规则:
可以把1当做true 0当做false
只有参与运算的两位都为1,&运算的结果才为1,否则就为0。
只有参加运算的两位都是0,| 运算的结果才是0,否则都是1。
只有参加运算的两位不同,^ 运算的结果才为1,否则就为0。
异或的特点:一个数异或同一个数两次,结果还是那个数.
例题1:是一种简单的加密思想。
/*** Author:Liu Zhiyong* Version:Version_1* Date:2016年3月29日19:02:21* Desc:使用异或(^)对图片数据进行加密*/import java.io.*;class ImageTest{public static void main(String[] args) throws Exception {//找到对应图片//File infile = new File("f:/cool.png");//File outfile = new File("f:/加密的图片.png");File infile = new File("f:/加密的图片.png");File outfile = new File("f:/解密后的图片.png");//建立数据通道,让图片的二进制数据流入FileInputStream inputStream = new FileInputStream(infile);FileOutputStream outputStream = new FileOutputStream(outfile);//边读,把读到的数据异或到一个数据,把数据写出int content = 0;while ((content = inputStream.read()) != -1)//如果没有读到文件的末尾,那么继续读取数据,读取到的数据已经存储到content变量中了{outputStream.write(content^12);}//关闭资源outputStream.close();inputStream.close();}}
加密的结果:
/*** Author:Liu Zhiyong* Version:Version_1* Date:2016年3月29日19:02:08* Desc:位运算符可能出现的笔试题目*1.交换两个变量的值,不准出现第三方变量 */class Demo4{public static void main(String[] args){int a = 3;int b = 5;System.out.println("交换前原始值:a=3;b=5");//定义了第三方变量,不符合题目要求System.out.println("方法1定义第三方变量:");Integer temp = a;a = b;b = temp;System.out.println("方法1交换后:a=" + a + ";b=" + b);//缺点:两个int类型的数据相加,有可能会出现超出int 的表示范围System.out.println("方法2相加法:");a = a + b;b = a - b;a = a - b;System.out.println("方法2交换后:a=" + a + ";b=" + b);//逻辑不清晰,不过显得比较高深System.out.println("方法3异或:");a = a^b; // a = a^bb = a^b; // b = (a^b)^b; b = a;a = a^b; // a = (a^b)^a; ==> a = (b^a)^a;System.out.println("方法3交换后:a=" + a + ";b=" + b);}}
5.移位操作符
<< 左移
>> 右移
>>> 无符号右移
技巧:可以理解为二进制1就是true,0就是false。
案例:
1、左移 (算术移位)
3<< 2 是如何在计算机里是实现的?
首先将3转换为2进制,
结果是12,所以3<<2 =12;
结论:左移就相当于乘以2的位移个数次幂.
2、右移
6>>2
结果是1,所以6>>2 =1;
结论一个数往左移越移越大,往右边移越来越小.
推论
3<<2=12; 3<<1=6 ; 3<<3=24;
3*4=12 ; 3*2=6; 3*8=24;
3*22=12; 3*21=6 3*23 =24;
结论往左移几位就是乘以2的几次幂。
右移规律
6>>2=1 ;6>>1=3 ;
6/4=1 ; 6/2=3 ;
右移两位就是除以 2的2次方,右移一位就是除以 2的一次方。
总结 :>> 是除以2的移动位数次幂
<< 是乘以2的移动位数次幂
用处:最快的运算是位运算。
练习:最有效率的方式算出2乘以8等于几?
2<<3 --> 2*(2^3)
3、无符号右移 (逻辑移位)
通过演示发现右移时高位就空了出来, >> 右移时高位补什么要按照原有 数据的最高位来决定。
1111-1111 1111-1111 1111-1111 1111-1010 -6>>2
1111-1111 1111-1111 1111-1111 1111-0010
最高位补什么要看原有最高位是什么
那么使用>> 后原来是最高位1 的那么空出来的最高位还是1 的,是0的还是0。
如果使用>>> 无论最高位是0还是1 空余最高位都拿0 补,这就是无符号右移。
1111-1111 1111-1111 1111-1111 1111-1010 -6>>>2
001111-1111 1111-1111 1111-1111 1111-10
结果是;1073741822
6 。三元运算符(三目运算符)
格式
(条件表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
示例:
1获取两个数中大数。
int x=3,y=4,z;
z = (x>y)?x:y;//z变量存储的就是两个数的大数。
int x = 1; int y = 2; int z; z = x > y ? x : y; System.out.println(z); //2
2判断一个数是奇数还是偶数。
7.运算符的优先级与结合性
- Java运算赋值运算符
- Java| Java 运算符
- Java位运算符
- java运算符
- java中的“%”运算符
- Java 位运算符
- Java 位运算符
- Java 位运算符
- Java 位运算符
- java 运算符优先级
- Java 位运算符
- java 运算符
- JAVA入门:运算符
- JAVA 运算符 >> >>> <<
- JAVA移位运算符
- Java 位运算符
- JAVA移位运算符
- java 运算符
- android 模拟器 genymotion的安装 以及 如何手动下载.ova
- font-weight bold和bolder区别
- 错排公式
- VS 错误处理
- 2017要看的书
- java运算符
- 报纸页数,2016蓝桥杯试题,第一题
- 版本控制:集中式VS分布式了解它们的运行方式
- java流类
- Linux下安装Tomcat服务器和部署Web应用
- 与受气包一起工作的日子
- SpringMVC运行流程
- docker中安装ssh和vsftp
- 项目中的退出APP