上一期的答案由于不唯一,这里就不公布答案了。
今天我们讲运算符。
运算符分为:算术运算符,关系运算符,逻辑运算符,位运算符,条件运算符,赋值运算符。
1、算术运算符:
|
类 型 |
运 算 符 |
说 明 |
|
基本运算符 |
+ |
加 |
|
取余运算符 |
% |
取余 |
|
递增或递减 |
++ |
递增 |
我想加减乘除应该不用细讲了,我想作为一个想学Java的人,加减乘除应该会吧!
下面我们来讲一讲取余。
取余的意思就是它的值取除后的余数,如:
5%4=1
2%5=2
100%5=0
下面给一个格式:
a%b
它的值就是a除以b的余数。
这就是取余。
练习:输出20除5的余数。
仔细思考。
答案:
public class a{
public static void main(String []
args){
System.out.println(5 );
}
}
输出结果:
5
有人肯定会奇怪,不应该是20%5吗?
其实是小学数学的知识了,注意题目“20除5”,不是“除以”。
下面讲一下递增和递减。
先给大家格式:
a--;
a++;
这是最常用的,递增即将a的值增加1,递减则减1.
但是,还有以下的格式:
++a;
--a;
这和上面的有什么不同的吗?
如果单独看没有什么不同,但如果和别的符号放在一起,就大不一样了。
如:
int a=10,b=20,c=0;
//这也一种定义方式,a,b均为int类型
c=++a+b;
和
int
a=10,b=20,d=0;
d=b+a++;
请问c和d的值分别是什么?
ans:c=31,d=30
为什么呢?
因为当++在前时,现将a递增,再计算表达式(将相同类型的数据用运算符号按一定的规则连接起来所组成的有意义的式子)的值,再赋给=前的变量;而++在后时,是先将表达式的值先赋给变量,在给a递增。这就是他们的区别。
2、关系运算符:
|
类型 |
说明 |
|
== |
等于 |
|
> |
大于 |
|
<</span> |
小于 |
|
!= |
不等于 |
|
>= |
大于等于 |
|
<= |
小于等于 |
这应该也不难理解,用法在以后会讲解。
3、逻辑运算符
主要有三种:
&&
和
||
或
!
非
他们都是与不布尔型的表达式使用,格式:
[表达式1]&&[表达式2]
[表达式1]||[表达式2]
![表达式]
&&的意思是:只有表达式1,表达式2的值都是true,这个表达式的值才是true,反之这是true。
如:
5>4&&6>2
这个式子的值就是true
||的意思是:表达式1与表达式2中有一个为true,一个为false,或两个均为true,它的值为true。
如:
5<4&&6>2
这个式子的值就是true
!的意思是:取与表达式的值相反的值
如:
!9>0
9>0是true,取反就是false。
4、位运算符:
~
按位取反
&
按位与
|
按位或
^
按位异或
>>
右移
>>>
右移补零
<<
左移
这些就要难理解些,他们是针对二进制数的。
所以,我先来简单介绍一下十进制和二进制的转换。
十进制转二进制的方法:辗转相除法。
如:45转二进制
45/2=22……1
22/2=11……0
11/2=5……1
5/2=2……1
2/2=1……0
1/2=0……1
然后由下向上读余数,即:101101
这就是结果。
二进制转十进制的方法:平方法
如:101101转十进制
1*2^5+0*2^4+1*2^3+1*2^2+0*2^1+1*2^0=45
懂了吗?
下面我们来讲讲这几种运算符。
首先是按位取反,格式:
~a
什么意思呢?
设a的二进制是00100101(byte是八位,前面补零)
取反的就是1变0,0变1.
如~a=11011010
下面再将按位与,格式:
a&b
设a=10001110,b=11100110
和的概念我们已经学过,若两边都为true则为true,这里也同样,只不过换成数字,true是1,false是0.
也就是将a的每位数与b的对应数比较,如:a&b=10000110
下面是按位或,格式:
a|b
设a=11101110,b=00101101
或的概念是两边一个true,一个false或两个均为true,值就为true。
同样的,a|b=11101111
然后是异或,格式:
a^b
异或的意思相信大家应该能猜到一二,在或的基础上加上个异,那就是除去个两个都为true,因为它们相同。
这就是了,即两个一个为0,一个为1,则值为1.
设a=11110000,b=10010110则
a^b=01100110
下面是移位,格式:
a>>N
a>>>N
a<<N
先讲a>>N,即将a右移N位,保留符号。
如10001000>>2=00100010
a<<N就不多讲了,就是将每位向左移。
a>>>N,是无视符号的
这里的讲一下二进制是怎么表示符号的
如2转换后为00000010
-2就是11111101,即取反。
-2>>>2=00111111
而-2>>2=11111110
5、条件运算符(又叫三元运算符)
先上格式:
变量=[布尔型表达式]?若为true的值:若为false的值;
什么意思呢?
即如果表达式的值为true,则把:前的值赋给变量;反之,则把:后的值赋给变量。
这应该很好理解,如:
int a=b>c?1:0;
对于此式,如果b>c,a=1,如果b<=c(即不符合b>c),则a=0.
6、赋值运算符
这个在以前讲过了,这里就不多讲了,给个格式就过:
变量=表达式;
即把表达式的值赋给变量。
下面再讲讲运算符的优先级:
|
优先级 |
运 算 符 |
解 释 |
|
1 |
[ ] () |
分隔符 |
|
2 |
++ -- ~ ! |
递增减运算 按位取反 逻辑非 |
|
3 |
* / % |
算术乘除运算 |
|
4 |
+ - |
算术加减运算 |
|
5 |
>> << >>> |
移位运算 |
|
6 |
<= < > >= |
大小关系运算 |
|
7 |
== != |
相等关系运算 |
|
8 |
& |
按位与运算 |
|
9 |
^ |
按位异或运算 |
|
10 |
| |
按位或运算 |
|
11 |
&& |
布尔逻辑与运算 |
|
12 |
|| |
布尔逻辑或运算 |
|
13 |
?: |
条件运算 |
|
14 |
= |
赋值运算 |
也就是说运算的先后顺序,1为最高。
好累啊!终于讲完了。
作业:
1、写出下列表达式的值:
12&23
11|22
2^4
~3
2>3
1>2&&5>4
2、将下列数转化为二进制
23
444
67
2
8
-20
-222
3、将下列数转化为十进制
11100010
11111111
00100111
11100101

浙公网安备 33010602011771号