根据功能的不同,Java运算符可以分为算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和条件运算符。
算术运算符算术运算符包含常规加法()、减法(-)、乘法(-)、除法(/)和模数) %,用于完成整数类型和浮点类型数据的算术运算。
许多语言的调制运算只能用于整数类型。 Java对其进行了扩展,允许浮点数的调制操作。 例如,3%2的结果为1,1,15.2 % 5的结果为0.2。 模具操作也可以用于负数。 结果的符号与第一个操作数的符号相同。 例如,5%-3的结果为2,-5%3的结果为-2。 另外,算术运算符有“”和“--”两种,分别称为正1和负1运算符。 这两种运算符有前缀格式和后缀格式,含有不同。 例如,I和I的执行顺序不同,I在使用I之前为1,I在使用I之前为1。 (I )和) I的情况与此相似。
关系运算符
关系运算符用于比较两个值:“大于”、“小于”、“大于”、“大于”、“小于”、“等于”和“不等于”。=) 6种。 关系运算符是二元运算符。 也就是说,每个运算符都有两个操作数,运算结果为逻辑值。 在Java中是“==”和“!=”两种运算符用于任何数据类型。 例如,可以确定两个数字的值是否相等,也可以确定对象或数组的实例是否相等。 在确定实例时,比较的是两个对象在内存中的引用地址是否相等。
运算符逻辑运算符包括逻辑积()、逻辑和(|)、逻辑非)! 请参阅。 前两个是二元运算符,后一个是一元运算符。 Java为逻辑与和提供了“短路”功能。 也就是说,在执行运算时,首先计算运算符左侧表达式的值,如果使用该值获得整个表达式的值,则跳过运算符右侧表达式的计算。 否则,计算运算符右侧的表达式,得到整个表达式的值。
位运算符
位运算符用于处理包含按位反转(~)、位和)、位或(|)、异或(^ )、右移位()、左移位()、无符号右移位)的二进制位。 位运算符只能对整数类型和字符类型的数据进行操作。
1 .相反((~) ) )。
参加运算的1个数据按二进制位进行“反转”运算。
运算规则:~1=0; ~0=1;
也就是说,对一个二进制数按位取反,即0变为1,1变为0。
2 .按位和() ) )。
参与运算的两个数据用二进制位进行and运算。
运算规则: 00=0; 01=0; 10=0; 11=1; 也就是说,两个人同时变成“1”,结果变成“1”。 否则等于0。
例如,35或0000 0011 0000 0101=0000 0001,因此35的值为1。
3 .位或(|) ) ) ) ) ) ) ) ) ) )。
参与运算的两个对象用二进制位进行or运算。
运算规则:0 | 0=0; 0 | 1=1; 1 | 0=1; 1 | 1=1;
也就是说,如果参加运算的两个对象中的一个对象是1,则该值是1。
例如,3 | 5,即0000 0011 | 0000 0101=0000 0111,因此3 | 5的价值为7。
4 .异或(^ )。
参与运算的两个数据用二进制位进行异或运算。
运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0;
也就是说,对于参与运算的两个对象,如果两个对应位为“异”,则该位的结果为1,否则为0。
5 .向左移动() )。
运算规则:以二进制格式将所有数字左移相应的位数,去掉(放弃)较高的位数,将较低的空格填充为零。 例如,在12345 1的情况下,将数字12345向左偏移1位:
位移后的十进制值为24690,正好是12345的两倍。 因此,有些人用左位移运算符代替乘以2的操作。 但是,这并不意味着要乘以真的或2。 虽然在很多情况下可以这样使用,但您应该知道,位移运算符通常可以代替乘以2的操作。 但是,这并不意味着两者是一样的。
请想想:如果任意十进制数左移32位,右补32个0,十进制不是都等于0吗? 当然不是! 将int型数据向左移动时,如果向左移动的位数在32位以上,位数首先求出馀数,然后向左移动。 也就是说,如果真的将32位的123451 32左移,则先求出位数。 也就是说,12345(322 )相当于12345,因此为12345 33的值和123451
6 .向右移动() )。
同样,还是以12345这个数值为例,12345向右移动一位: 123451。
向右移动的值为6172,与int类型的数据12345除以2所得的整数相同,因此在某些情况下也可以代替除以2的操作。 另外,对于超过32位的位移,与左移运算符相同,首先求出位数并求出馀数。
7 .无符号右移(
>>>)无符号右移运算符和右移运算符是一样的,不过无符号右移运算符在右移的时候是补0的,而右移运算符是补符号位的。以下是-12345二进制表示:
对于源码、反码、补码不熟悉的同学,请自行学习,这里就不再进行补充了讲解了,这里提醒一下,在右移运算符中,右移后补0,是由于正数 12345 符号位为0 ,如果为1,则应补1。
1、原码、反码和补码说明:
一个数可以分成符号位(0正1负)+ 真值,原码是我们正常想法写出来的二进制。由于计算机只能做加法,负数用单纯的二进制原码书写会出错,于是大家发明了反码(正数不变,负数符号位不变,真值部分取反);再后来由于+0, -0的争端,于是改进反码,变成补码(正数不变,负数符号位不变,真值部分取反,然后+1)。二进制前面的0都可以省略,所以总结来说:计算机里的负数都是用补码(符号位1,真值部分取反+1)表示的。 2、位运算符和2的关系
位运算符和乘2、除2在大多数时候是很相似的,可以进行替代,同时效率也会高的多,但是两者切记不能混淆 ;很多时候有人会把两者的概念混淆,尤其是数据刚好是 2、4、6、8、100等偶数的时候,看起来就更相似了,但是对于奇数,如本文使用的12345 ,右移之后结果为6172 ,这个结果就和数学意义上的除以2不同了,不过对于int 类型的数据,除2 会对结果进行取整,所以结果也是6172 ,这就更有迷惑性了。 赋值运算符
赋值运算符的作用就是将常量、变量或表达式的值赋给某一个变量。
除了“=”,其它的都是特殊的赋值运算符,以“+=”为例,x += 3就相当于x = x + 3,首先会进行加法运算x+3,再将运算结果赋值给变量x。-=、*=、/=、%=赋值运算符都可依此类推。
条件运算符条件运算符( ? : )也称为 “三元运算符”或“三目运算符”。
语法形式:布尔表达式 ? 表达式1 :表达式2。
运算过程:如果布尔表达式的值为 true ,则返回 表达式1 的值,否则返回 表达式2 的值。
运算符的优先次序在对一个表达式进行计算时,如果表达式中含有多种运算符,则要安运算符的优先次序一次从高向低进行。运算符的优先次序如下: