java运算符常识(初识Java七)

运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等Java语言使用运算符将一个或多个操作数据连接成执行性语句,用以实现特定功能,今天小编就来说说关于java运算符常识?下面更多详细答案一起来看看吧!

java运算符常识(初识Java七)

java运算符常识

3.7 运算符

运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。Java语言使用运算符将一个或多个操作数据连接成执行性语句,用以实现特定功能。

算术运算符

赋值运算符

比较运算符

逻辑运算符

位运算符

类型相关运算符

3.7.1 算术运算符

加法运算( )、减法运算(-)、乘法运算(*)、除法运算(/)、取余(取模)运算(%)、自加运算( )、自减运算(--)、( )还可以做为字符串的连接符。

举例1:

int a = 12; int b = 24; System.out.println("加法运算:" (a b)); System.out.println("减法运算:" (a-b)); System.out.println("乘法运算:" a*b); System.out.println("除法运算:" a/b); System.out.println("取模运算:" a%b); int c = --a; //先自己做了一次自减运算,再将a的值给了c System.out.println(c); System.out.println(a); c = b--; //先将b的值给了c,然后再自己做了一次自减运算 System.out.println(c); System.out.println(b); int x = 4; int y = (x ) ( x) (x*10); System.out.println(“x:” x); System.out.println(“y:” y); System.out.println("hello" 'a' 1); System.out.println('a' 1 "hello"); System.out.println("5 5=" 5 5); System.out.println(5 5 "=5 5"); //字符串数据和其他数据做 ,结果是字符串类型。 //这里的 不是加法运算,而是字符串连接符。

3.7.2 赋值运算符

Java使用“=”作为赋值运算符,为变量指定变量值。举例:

int a = 5; String b = “abc”;

3.7.3 位运算符

Java支持的运算符有7个:按位与(&)、按位或(|)、按位非(~)、按位异或(^)、左移运算符(<<)、右移运算符(>>)、无符号右移运算符(>>>)。使用位运算符,我们必须先把数据换算成二进制,然后再参加运算。

基本运算法则

第一个运算数

第二个运算数

按位与(&)

按位或(|)

按位异或(^)

0

0

0

0

0

0

1

0

1

1

1

0

0

1

1

1

1

1

1

0

按位非运算,举例:

int a = 19; System.out.println(~a); //输出结果为-20

运算原理:19的二进制表示方式为:0001 0011按位非运算为:1110 1100 按位计算后的值为补码,(计算机都是按照补码进行表示的),根据补码获取它的反码,前面为1表示为负数,负数的反码是:补码减1,因此其反码为1110 1011,其原码为1001 0100,转换成十进制为-20。

按位异或运算有一个特点:一个数据对另一个数据异或两次,该数本身不变。

int a = 5; int b = 6; System.out.println(a^b^b); System.out.println(a^b^a);

位移运算符:转换为32位后再参加运算。

左移运算:把第一个操作数的二进制码向左移动指定位数,右边空出来的位数以0填充。正数直接换算成二进制就可以了。

右移运算:Java的右移运算符有两个>>和>>>,对于>>运算符,把第一个操作数的二进制码向右移动指定位数后,左边空出来的位数以原来的的符号位填充,如果是正数用0填充,如果是负数用1填充,>>>运算符移动后,只用0填充。

举例:

-5>>2 -5的原码是 1000 0101, 它的反码为:1111 1010, 它的补码为:1111 1011, 右移两位为: 1111 10, 前面用符号位填充为:1111 1110(补码)。 将补码转换成十进制数: 先变成反码:1111 1101, 其原码为:1000 0010, 表示十进制数为:-2。 -32<<3 这个问题。 -256

注意了:

正数的的位移可以这么做。

<< 就是把<<左边的数据乘2的移动次幂。例如:3<<2 3*2^2 = 12;

>> >>>就是把>>左边的数据除2的移动次幂。例如:24>>2 24/2*2 = 6;

面试题:

一、实现两个整数变量的交换。

int a = 4; int b = 5; 1. 借助第三个变量。 2. 使用位异或运算符实现 左边:a,b,a 右边:a^b a = a^b; b = a^b; a = a^b; 3. 用变量相加的做法 a = a b; b = a-b; a = a-b; 再看看这个的值传递? 4. 一个组合语句 b = (a b) – (a=b); 还是一个值的相互变换~

二、请用最有效率的方式写出计算2乘以8的结果?

2<<3 2*2^3

因为将一个数左移n位,就相当于乘以了2的n次方,那么,一个数乘以8只要将其左移3位即可,而位运算cpu直接支持的,效率最高,所以,2乘以8等於几的最效率的方法是2 << 3。

3.7.4 扩展后的赋值运算符

赋值运算符可以与算术运算符、位移运算符结合,扩展成为功能更加强大的运算符。

=:对于x = y,表示 x = x y; -=:对于 x-= y,表示 x = x-y; *=: x*= y,表示 x = x * y; /= ; %=; &=; |=; ^=; <<= ; >>=; >>>=;

1.short s1 = 1; s1 = s1 1;有什么错? short s1 = 1; s1 = 1;有什么错?

对于short s1 = 1; s1 = s1 1;由于s1 1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。

对于short s1 = 1; s1 = 1;由于 =是java语言规定的运算符,java编译器会对它进行特殊处理,隐藏着一个强制类型转换,因此可以正确编译。For:S1 = (short)(s1 1);

3.7.5 比较运算符

比较运算符用于判断两个变量或者常量的大小,比较运算的结果是一个boolean值(true或者false)

>:大于,只支持左右两边操作数是数值类型。

>=:同上

<:同上

<=:同上

==:同上,即使他们数据类型不相同,只要它们的值相同,也返回true,例如:97==’a’,返回true

Ø !=:不等于,如果进行比较的两个操作数都是数值类型,只要值不同就返回true,如果比较的是引用类型,只有当两个引用变量相同类型的实例时才可以比较,只要两个引用指向不是同一个对象就返回true,

举例1:

Car car1 = new Car(); TestCar car2 = new TestCar(); boolean result = (car1 ==car2); //两个类型不同不能进行比较

举例2:

Car car1 = new Car(); Car car2 = new Car(); boolean result1 = car1 !=car2; boolean result2 = car1 ==car2; System.out.println(result1); //输出结果为true System.out.println(result2); //输出结果为false

举例3:

Car car1 = new Car(); Car car2 = car1; boolean result = car1 ==car2; System.out.println(result); //输出结果为true

3.7.6 逻辑运算符

逻辑运算符用于操作两个布尔型的变量或常量,逻辑返回的值为boolean类型,主要有6个,

&&:前后两个操作数都为true时,返回true,否则返回false,例如:32>24 &&“abc”==”abc”,返回true。在Java中,3<X<6这样写是错误的,要写成x>3&&x<6。

||:前后两个操作数,有个为true就返回true,举例:32>24 || “abc”!=”abc”,返回true

&(不短路与),|(不短路或),!(非),^(异或)

l “&”和“&&”的区别:

• 单&时,左边无论真假,右边都进行运算;

• 双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。

“|”和“||”的区别同理,双或时,左边为真,右边不参与运算。那你们说我们开发时用哪个?

l 异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。

3.7.7 三目运算符

格式:

(关系表达式)?表达式1:表达式2;

如果条件为true,运算后的结果是表达式1;

如果条件为false,运算后的结果是表达式2;

举例:

int a= 5>3 ? 6 : 7;

int a = 3; int b = 4; int c = 5; 用三目运算符求出最大值。

(1) 可以用两个中间值作为接收结果来比较。

(2) 直接一步搞定。(a>b)?((a>c)?a:c):((b>c)?b:c);

3.7.8 运算符的优先级

运算符说明

Java运算符

分隔符

. [] () , ;

单目运算符

-- ~ !

强制类型转换

(type)

乘除取模运算符

* / %

加减运算符

-

位移运算符

<<>>>>>

关系运算符

<<= >>=

等价运算符

== !=

按位与运算

&

按位异或运算

^

按位或运算

|

条件与运算

&&

条件或运算

||

三目运算符

? :

赋值运算符

= = -= *= /= &= |= ^= %= <<= >>= >>>=

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页