Java-赋值运算符-逻辑运算符-位运算符-异或应用
2016-07-10 14:35
399 查看
赋值运算符
逻辑运算符
位运算符
异或应用
package basis.day02; /** * 赋值运算符: = += -= *= /= %= * += -=等等既可以完成运算,又不改变运算对象的数据类型。 * @author LENOVO * */ public class TestAss { public static void main(String[] args){ int i = 10; // = 是一个赋值运算符,将10赋值给i i += 2; //i = i + 2 同时i的数据类型不会发生改变 System.out.println(i); int i1 = 12; i1 += 1.5; //这里虽然1.5是double,但是将其强转为int型(范围大的转范围小的,截取) System.out.println(i1); int i2 = 13; i2 /= 3; System.out.println(i2); double i3 = 13; i3 /= 3; System.out.println(i3); } }
逻辑运算符
package basis.day02; /** * 逻辑运算符 & && | || ^ ! * @author LENOVO * */ public class TestLogic { public static void main(String[] args){ boolean a = true; boolean b = false; System.out.println(a & b); //&(与) false System.out.println(a && b); //&&(短路与) false System.out.println(a | b); //| (或) true System.out.println(a || b); //||(短路或) true System.out.println(a^b); //^ (异或) true 异或:不同为true,相同为false System.out.println(!a); //! (非) false int i = 10; int j = 10; /* * &与短路&& * 对于&&,若左端为false,右端不进行运算 * 对于&,无论左端是false还是true,右端都进行运算 */ if(b && ++i > 0){ System.out.println("早上好"); }else{ System.out.println("中午好"); } System.out.println(i); //10 if(b & ++j > 0){ System.out.println("早上好"); }else{ System.out.println("中午好"); } System.out.println(j); //11 /* * |与|| * ||若左端为true,右端不进行运算 * |无论左端为true或者false,右端都要进行运算 */ int ii = 2; int jj = 2; if(a || ++ii > 0){ System.out.println("下午好"); }else{ System.out.println("晚上好"); } System.out.println(ii); //2 if(a | ++jj > 0){ System.out.println("下午好"); }else{ System.out.println("晚上好"); } System.out.println(jj); //3 } }
位运算符
package basis.day02; /** * 位运算符 << >> >>> & | ^ ~ * @author LENOVO * */ public class TestBit { public static void main(String[] args){ /* * << 左移运算符(左移一位相当于乘以二(末尾补0)) * 注意:左移位数不能太多,超出类型范围 */ int i = 12; i = i << 2; System.out.println(i); //48 int ii = -12; ii = ii << 2; System.out.println(ii); //-48 /* * >> 右移运算符(右移一位相当于除以二(符号位是什么补什么)) * >>> 无符号右移运算符(不管正负都补0) * 对于正数,>>和>>>结果一致 * 对于负数,>>和>>>结果不一致 */ int j = 12; j = j >> 2; System.out.println(j); //3 //j = j >>> 2; //System.out.println(j); //3 int jj = -12; //jj = jj >> 2; //System.out.println(jj); //-3 jj = jj >>> 2; System.out.println(jj); //1073741821 /* * 位运算指的都是二进制位 * &两个操作数的每一位进行与运算 * |两个操作数的每一位进行或运算 * ^两个操作数的每一位进行异或运算 * ~操作数按位取反 */ int a = 12; int b = 5; System.out.println(a & b); //4 System.out.println(a | b); //13 System.out.println(a ^ b); //9 System.out.println(~ b); //-6 注意按位取反包括符号位 } }
异或应用
package basis.day02; /** * 异或的重要用途:转换m,n的值 * @author LENOVO * */ public class TestXor { public static void main(String[] args){ /* * 交换m,n的值 */ int m = 12; int n = 5; /* * 方法一:设置一个中间变量temp */ //System.out.println("m = " + m + " n = " + n); //System.out.println("交换"); //int temp ; //temp = m; //m = n; //n = temp; //System.out.println("m = " + m + " n = " + n); /* * 叠加,再减。缺点不能计算过大的数 */ //System.out.println("m = " + m + " n = " + n); //System.out.println("交换"); //m = m + n; //n = m - n; //m = m - n; //System.out.println("m = " + m + " n = " + n); /* * 利用异或的特性 * 两个相同的数进行异或(因为每一位都相同)得0,0与任何数异或还是这个数(0,1异或得1;0,0异或得0) * 因此三个数进行异或(其中有两个相同的数)结果为不同于其他两个的数 */ System.out.println("m = " + m + " n = " + n); System.out.println("交换"); m = m ^ n; n = m ^ n; //(m^n)^n m = n ^ m; //n^(m^n) n已经改变为m的值(12)(因此表达式最后结果是n的值赋值给m) System.out.println("m = " + m + " n = " + n); } }
相关文章推荐
- java synchronized详解
- Java Web学习(3):Win7 64位操作系统搭建Java Web开发环境
- 《Maven实战》学习汇总
- Java核心基础(4) 异常相关
- java 版 异或加密
- java synchronized
- Java中文分词组件 - word分词
- [置顶] SpringMVC工作原理
- Java NIO服务器端开发
- [Java IO]01_File类和RandomAccessFile类
- Java异常
- SpringSecurity方法层4种方式使用
- Lucene建立索引 使用IKAnalyzer扩展词库
- 如何用javadoc命令,生成api帮助文档
- IKAnalyzer词典占用内存大小分析
- java编译做了哪些事?
- java web
- des算法java模拟实现
- druid-1.0.21源代码导入eclipse工程遇到的问题
- java web