黑马软件工程师—位运算符练习 十进制的十六进制表现形式 及三元运算符
黑马程序员—位运算符练习 十进制的十六进制表现形式 及三元运算符
------- android培训、java培训、期待与您交流! ----------
class e//练习题 { public static void main(String[] args) { /* 一: 如何最快的计算出2*8的结果 思路利用位运算 计算机的底层是 二进制运算 所以可以利用左移的方法 这就是位运算高效的原因 */ System.out.println(2<<3);//即2乘以2的3次幂 结果为16 /* 二: 如何对两个整数变量的值进行互换 */ int m=2,n=3; /* 法一: 借助第三方变量 int temp=n; n=m; m=temp; System.out.println("m="+m+",n="+n); //结果为m=3,n=2 */ /* 法二: 利用和的转换 开发中一般情况使用这种方法,比第三种更 直观,更容易想到,但是这种方法有个缺点,就是 int的范围问题,两个变量的和如果超过2的31次 方,则容易损失精度 n=m+n; m=n-m;//要想m=3 则需要m和n的和减去原来的m n=n-m;//要想n=2 则需要m和n的和减去上式中的m 因为m已经是3了 System.out.println("m="+m+",n="+n);//结果为m=3,n=2 */ /* 法三: 借助异或 ^ (这个方法不容易想到) */ n=n ^ m; m=n ^ m;//相当于m=n ^ m ^ m 此时m已经等于int中的n值了 即m=3 n=n ^ m; /* 此时等式后面的n仍是n=n^m中的左数第一个n,但是m已经变为 上式中的m了 即m=n^m^m,所以最后n的结果为n=(n^m) ^ (n^m^m) 相当于从右往左看m^(m^n)^(m^n)所以最后还是m值 即 m=2 */ System.out.println("m="+m+",n="+n);//结果为m=3,n=2 System.out.println((char)67); } }
class weiyi //练习2 位移的应用 十进制的十六进制表现形式 及三元运算符 { public static void main(String[] args) { //System.out.println(Integer.toBinaryString(60)); //System.out.println(Integer.toHexString(60)); /* 二 问题:如何获得60的十六进制位的表现形式 ? 思路:先获取60的二进制形式的最低4位,通过&15(即二进制位 1111 ) */ int num = 60; int n1 = num & 15; //System.out.println((char)(n1-10+'A')); /* 结果为c 即答案的倒数第一位(后期有更简单的方法) n1-10是为了看出最后一位 比10多几位,因为16进制满9就进了 没有10,所以利用ASCII码表的字符具有数字 代表的功能得出最低位应该是什么 如下: 0-9 'A' 'B' 'C' 'D' 'E' 'F' 65 66 67 10 11 12 13 14 15 12 - 10 = 2 + 'A' = (char)67; */ //接着 要获取下一组四位,则将60右移4位。 int temp = 60>>> 4; /* 为什么要用无符号右移 因为如果出现负数的情况 则右移后高位会被1补齐 则变 成死循环了 所以要用无符号右移 */ //接着 对temp的值进行最低四位的获取。 int n2 = temp & 15; //System.out.println(n2);//结果为3 即答案的倒数第二位 最终答案为60=3c /* 上述的 int n1 = num & 15; System.out.println((char)(n1-10+'A')); 中我们实际并不知道n1与9的大小关 系 所以应该是这样写 利用马上要学的三元运算符 示例如下: */ int x=3,y; y=(x>1)?100:200; System.out.println("y="+y); //同理 我们可以完善上面的做法 System.out.println(n1>9?(char)(n1-10+'A'):n1); /* 注意 ? : 与后期的语句相像 因为是运算符 所以一定有结果 而且如果100换成 字符型比如说'a' 因为'a'会与200进行运算 所以会自动进行提升 就出现67而不 是c的情况了 结果是67了.吼吼...老师说以后自己写一个代码对一个整数进行16 进制形式获取的时候,再会讲到 */ System.out.println(n2>9?(char)(n1-10+'A'):n2); /* 想要知道一个整数的二进制表现形式的时候,也可用上述方法 二进制就是& 1 再右移1位 八进制就是& 7 再右移3位 十六进制就是&15 再右移4位 */ } }