Java基础----Java中的运算

以下代码皆在eclipse内进行操作

*以下规则对所有运算都适用

1.同种类型参与运算(可能发生自动类型转换),得到同种类型的数据.

int a = 1;
int b = 2;
int c = a + b;//3
/*
此时不会发生自动类型转换,也不会报错,因为a与b都是整型,所以得到的结果也是整型,
所以可以将结果赋值给C.
*/

2.不同种类型参与运算,得到数据范围较大的类型.

Java基础----Java中的运算_第1张图片

1.算术运算符

         运算符          含义           实例           结果
             +

1.加法

2.正号

1. 1+8

2. +1

1. 10

2. 1

             -

1.减法

2.负号

1. 5 -3

2. int a = 1; -a

1. 2

2. -1

             * 乘法 2 * 4

8

             / 除法 4 / 2 2
            % 求余数(仅限整数) 9 % 2 1

*

1.先取余数和乘除,后加减,有括号则括号优先;

2.整数除数不能为0;

3.浮点型除数若为0.0,则结果为无穷大,如1 / 0.0;

1.前缀运算符和后缀运算符

++a:先进行a+1,然后将a+1的值作为整个表达式的值.

--a:先进行a-1,然后将a-1的值作为整个表达式的值.

a++:先将a的值作为整个表达式的值,然后在进行a+1的操作.

a--:先将a的值作为整个表达式的值,然后再进行a-1的操作.

2.字符串拼接符

一般情况下,"+"会用来做字符串的拼接.

如:

Java基础----Java中的运算_第2张图片

Java基础----Java中的运算_第3张图片

 很明显在这里它都是做的字符串的拼接,尤其是第二十行的代码,我们可以发现在这里时系统也没有对246和78做加法运算,而是字符串拼接.

2.赋值运算符

这个就很简单啦,就是在Java中表示赋值就是用"=",如果是等于就用"==".

*注意:

a=a+b可以写成a+=b,同理可得还有a*=b,a/=b,以及a%=b;

Java基础----Java中的运算_第4张图片

 得到的答案是7,a+=b不是等同于a=a+b嘛,然后赋值符号"="是具有右结合性的,即先进行右边的运算,此处就是先进行a+b,然后将a+b得到的结果再赋值给a.

3.关系运算符

关系运算符用来比较两个数的大小,结果的返回值为boolean类型.

          运算符         含义           示例          结果
            == 等于 1 == 2 false
            != 不等于 1 != 2 true
            < 小于 1 < 2 true
            > 大于 1 > 2 false
           <= 小于等于 3 <= 3 true
           >= 大于等于 3 >= 3 true

4.逻辑运算符

逻辑运算符的两端只能是返回值为boolean型的表达式,其结果也是boolean型.

运算符 含义 示例 结果
&&(双位与) 两端都为true才为true,否则为false (1 < 2)  && (8 < 5) false
||(双位或) 两端都为false才为false,否则为true (1 < 2) && (8 < 5) true
!(非) 将true变成false,将false变为true !(1 < 2) false

另外双位与和双位或具有短路性质,即

如果是双位与,前面一端如果已经确定了为false,那么就不会再对后面一段的表达式进行判断,直接将false作为整个表达式的结果.

而如果是双位或,前面一端如果已经确定了为true,那么就不会再对后面一段的表达式进行判断,直接将true作为整个表达式的结果.

由于双位与和双位或的短路性质,就会有一个例子的产生;

System.out.println(1 > 2 && 1 / 0),这个输出的结果就是false但事实上,后面那个1 / 0是错的,系统应该报错,但是因为它的短路性质就直接输出false了.

5.位运算符

位运算符两端既可以是返回值是boolean类型的表达式,也可以是数值.

1.&(按位与)

(1)如果两端都是Boolean表达式,则跟双位与用法相同,只不过按位与不具备短路性质.

(2)如果两端都是数值,则如果对应位都是1,则结果才为1,否则为0;

举例: 12 & 15

首先将12与15都转换成二进制,12:1100,15: 1111;

然后再进行与运算: 1100

                               1111

结果                        1100

观察对应位置,全为1才为1,所以结果是1100,转换成10进制就是12,所以最终输出结果为12.

2.|(按位或)

(1)如果两端都是Boolean表达式,则跟双位或用法相同,只不过按位或具备短路性质.

(2)如果两端都是数值,则如果对应位都是0,则结果才为0,否则为0;

举例: 12 | 15

首先将12与15都转换成二进制,12:1100,15: 1111;

然后再进行与运算: 1100

                               1111

结果                        1111

观察对应位置,全为1才为1,所以结果是1111,转换成10进制就是15,所以最终输出结果为15.

3.^(异或)

(1)如果两端都是Boolean表达式则两端如果都是true或flase,则结果位flase,否则为true.

(2)如果两端都是数值,则如果对应位都是0或1,则结果才为0,否则为1;

举例: 12 ^ 15

首先将12与15都转换成二进制,12:1100,15: 1111;

然后再进行与运算: 1100

                               1111

结果                        0011

观察对应位置,全为1才为1,所以结果是0011,转换成10进制就是3,所以最终输出结果为3.

4.~(非)

(1)这个运算符如果后面接的是boolean表达式,则如果接的是返回值为true的表达式,就将false作为整个表达式的最终结果,如是接的是false,则将true作为整个表达式的最终结果.

(2)如果接的是数值,则将数值的每一位都按位取反.

举例: 12

首先将12转成二进制位01100;

然后再进行运算取反运算: ~ 01100

首先我们需要明白

正数的原码=反码=补码

负数的反码=符号位不变,其它位全部按位取反,

负数补码=反码+1

再进行运算将01100全部取反变成10011(最高位是符号位)但是这还只是补码,所以要减1来变成反码为10010,然后再将它变成原码,反码符号位不变,然后其它位全部取反,就变成了11101,转成十进制就是-13.

至于为什么这么做,我到网上搜了,有一个帖子是这么说的,01100取反后,由于计算机内是以补码的形式储存的,所以还要将补码变成原码,而补码和原码之间的联系就是反码,所以要取反了再通过反码得到原码.

帖子链接:

https://blog.csdn.net/zyh201314zyh/article/details/114294827

这个博主还告诉了我们一个小公式:(~x) = -(x + 1).

6.移位运算符

1.<<(左移位运算符)

举例子来讲述它的用法吧.

12 << 1 //左边的数值就是你要移位的对象,右边就是你要移的位数

这个就是要将数值12左移一位.

(1)首先将12转成二进制形式是01100,所有的1和0都向左移一位,末位补0,就变成了011000,变成十进制就是24.

(2)可以直接采用公式,要将12左移一位,就将12*2得到结果为24,如果是两位就将12*2*2,得到结果为48.左移n位就将移位对象乘以2的n次方.

2.>>(右移位运算符)

也用例子来讲述吧.

12 >> 1 //左边的数值就是你要移位的对象,右边就是你要移的位数

这个就是要将数值12右移一位.

(1)首先将12转成二进制形式是01100,所有的1和0都向右移一位,最高位补0,就变成了00110,变成十进制就是6.(记住如果最高位一开始是1移位后就补1,如果是0,就补0)

(2)可以直接采用公式,要将12右移一位,就将12/2得到结果为6,如果是两位就将12/2/2,得到结果为3.右移n位就将移位对象除以2的n次方.

3.>>>(无符号右移运算符)

这个运算符与右移运算符的唯一区别就是它不管最高位的符号位,也就是最高位一律补0.

*如果移位超过其数据类型占位大小,那么便取余来移位.

举个例子来说,如果是int a = 12;

现在a << 33,我们知道int类型占位只有32,很明显它超过32位,那么现在a向左移1位,因为33 % 32 的结果为1,所以a实际上只左移了移位.

7.运算符的优先级

Java基础----Java中的运算_第5张图片

                                                             图片来自于网络

如果有错误,希望各位大佬告知,万分感谢!!!

你可能感兴趣的:(Java基础,java)