本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/44724267
本文主要介绍Java中常见的运算符,重点介绍了逻辑运算符和位运算符。希望对你有所帮助。
算术运算符
(1)一元运算符:
正(+)、负(-)、加1(++)和减1(--)4个。
加1、减1运算符只允许用于数值类型的变量,不允许用于表达式中。加1、减1运算符既可放在变量之前(如++i),也可放在变量之后(如i++),两者的差别是:如果放在变量之前(如++i),则变量值先加1或减1,然后进行其他相应的操作(主要是赋值操作);如果放在变量之后(如i++),则先进行其他相应的操作,然后再进行变量值加1或减1。
例如:
int i=6,j,k,m,n;
j = +i; //取原值,即j=6
k = -i; //取负值,即k=-6
m = i++; //先m=i,再i=i+1,即m=6,i=7
m = ++i; //先i=i+1,再m=i,即i=7,m=7
n = j--; //先n=j,再j=j-1,即n=6,j=5
n = --j; //先j=j-1,再n=j,即j=5,n=5
在书写时还要注意的是:一元运算符与其前后的操作数之间不允许有空格,否则编译时会出错。二元运算符用的较少暂不讨论。
关系运算符
关系运算符用于比较两个数值之间的大小,其运算结果为一个逻辑类型的数值。关系运算符有六个:等于(==)、不等于(!=)、大于(>)、大于等于(>=)、小于(<)、小于等于(<=)。 由于比较简单,这里也不讨论了。
逻辑运算符
逻辑运算符要求操作数的数据类型为逻辑型,其运算结果也是逻辑型值。逻辑运算符有:逻辑与(&&)、逻辑或(||)、逻辑非(!)、逻辑异或(^)、逻辑与(&)、逻辑或(|)。
/** * * @author liqq */ @Test public void testLogic() { // && 逻辑与 (短路) 对于a&&b 当a为false时,不需要判断b是否为false System.err.println(false && true); // false System.err.println(false && false); // false System.err.println(true && true); // true System.err.println(); // || 逻辑或(短路) 对于a||b 当b为true时,不需要判断b是否为true System.err.println(false || true); // true System.err.println(true || true); // true System.err.println(false || false); // false System.err.println(); // !逻辑非 System.err.println(!true); // false System.err.println(!false); // true System.err.println(); // ^ 逻辑异或 (相同为false,不同为true) System.err.println(false ^ true); // true System.err.println(true ^ true); // false System.err.println(false ^ false); // false System.err.println(); // & 逻辑与(不短路) 对于a&b 当b为false时,仍需要判断b是否为false System.err.println(false & true); // false System.err.println(true & true); // true System.err.println(false & false); // false System.err.println(); // | 逻辑或(不短路) 对于a|b 当a为true时,仍然需要判断b是否为true System.err.println(false | true); // true System.err.println(true & true); // true System.err.println(false & false); // false System.err.println(); }
位运算符
位运算是以二进制位为单位进行的运算,其操作数和运算结果都是整型值。
位运算符共有7个,分别是:位与(&)、位或(|)、位非(~)、位异或(^)、右移(>>)、左移(<<)、0填充的右移(>>>)。
/** * @author liqq */ @Test public void testBit() { // 位与(&) 和逻辑与类似 System.err.println(1 & 0); // 0 System.err.println(1 & 1);// 1 System.err.println(0 & 0);// 0 System.err.println(); // 位或(|)和逻辑或类似 System.err.println(1 | 0);// 1 System.err.println(1 | 1);// 1 System.err.println(0 | 0);// 0 System.err.println(); // 位非(~) System.err.println(~0); // -1 System.err.println(~1);// -2 System.err.println(); // 位异或(^) 相同为0,不同为1 System.err.println(1 ^ 0);// 1 System.err.println(1 ^ 1);// 0 System.err.println(0 ^ 1);// 1 System.err.println(); // 右移(>>)右移数值变小,每移动一位数值减半 System.err.println(2 >> 1);// 1 System.err.println(2 >> 2);// 0 System.err.println(8 >> 1);// 4 System.err.println(8 >> 2);// 2 System.err.println(); // 左移(<<)左移数值变大,每移一位数值增倍 System.err.println(2 << 1);// 4 System.err.println(2 << 2);// 8 System.err.println(8 << 1);// 16 System.err.println(8 << 2);// 32 System.err.println(); // 0填充的右移(>>>)无符号,右边空出的位以0填充 System.err.println(8>>>2);//2 System.err.println(-14 >>> 2); //1073741820 /*(即二进制的 11111111 11111111 11111111 11110010), 向右移两位后等于 1073741820 (即二进制的 00111111 11111111 11111111 11111100)*/ System.err.println(); }