黑马程序员技术交流社区

标题: 为什么强转不了呢? [打印本页]

作者: 张小贝    时间: 2014-1-6 11:38
标题: 为什么强转不了呢?
public class OperateDemo {
public static void main(String[] args){
  int num = 60;
  int n1 = num&15;
  System.out.println(n1>9?((char)(n1-10+'A')):n1);
  num = num >> 4;
  int n2 = num &15;
  System.out.println(n1>9?((char)(n2-10+'A')):n2);
  
}
}

作者: forDream    时间: 2014-1-6 12:49
public class OperateDemo {
        public static void main(String[] args) {
                int num = 60;
                int n1 = num & 15;

                if (n1 > 9) {
                        char c = (char) (n1 - 10 + 'A');
                        System.out.println(c);
                } else
                        System.out.println(n1);
                num = num >> 4;
                int n2 = num & 15;
                if (n1 > 9) {
                        char c = (char) (n2 - 10 + 'A');
                        System.out.println(c);
                } else
                        System.out.println(n2);

        }
}

百度了解原因是这样
在表达式中
会以表达式当中的最大数据类型为参考
计算出的结果会隐式转换为那个最大数据类型


三目条件运算符与 if...else 结构性质并不是完全相同的,绝对不是对if else的封装。从效率上来看,一般是if else比较高,因为三目运算的话,可能还会涉及到数据类型转换的问题。

最后 求分分

作者: 小小菜鸟    时间: 2014-1-6 14:30
  1. class OperateDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                
  6.                 int num = 60;
  7.                 //获取60的最低4位,通过&15;
  8.                 int  n1 = num & 15;
  9.                
  10.                 System.out.println(n1>9?(char)(n1-10+'A'):n1);
  11.                
  12.                 //要获取下一组四位,将60右移4位。
  13.                 int temp = num >>> 4;
  14.                 //对temp的值进行最低四位的获取。
  15.                 int n2 = temp & 15;
  16.                 System.out.println(n2>9?(char)(n2-10+'A'):n2);
  17.                 /*
  18.                 0-9 'A' 'B' 'C' 'D' 'E' 'F'
  19.                         65   66  67
  20.                         10   11  12  13  14  15

  21.                         12 - 10 = 2 + 'A' = (char)67;
  22.                 */

  23.                
  24.         }
  25. }
复制代码

运算时,必须是处于同一种数据类型进行运算的,例如:true?x:1111111110中,由于x是char型,1111111110是int型,而int型大于char型,所以运算时x将被自动转换成int型数据进行运算
同理,false?i:x中,i为int型、x为char型,所以也一律转换成int型进行运算,即x被转换成了98。
作者: 小泉真也    时间: 2014-1-6 15:36
  1. /**

  2. public class OperateDemo {
  3.         public static void main(String[] args){
  4.                 int num = 60;
  5.                 int n1 = num&15;
  6.                
  7.                 //60 与上 15             0011 1100 & 0000 1111  得到    0000 1100(12)
  8.                   
  9.                

  10.                 System.out.println(n1>9?((char)(n1-10+'A')):n1);
  11.                
  12.                
  13.                 //三目运算的判断,n1>9。
  14.                 //但是在这里,n1是int 类型,在运算了减10之后,与字符'A'相加,再做强制转换。好像不合适。
  15.                 //因为运算时,需要同一种类型做运算处理。
  16.                
  17.                
  18.                
  19.                 num = num >> 4;
  20.                 int n2 = num &15;

  21.                 System.out.println(n1>9?((char)(n2-10+'A')):n2);
  22.                
  23.                 //这里的结果也类似如上
  24.                
  25.         }
  26. }
  27. */


  28. //不妨试试换一种语句
  29. public class OperateDemo {
  30.     public static void main(String[] args){
  31.                 int num = 60;
  32.                 int n1 = num & 15;

  33.                 if (n1 > 9){
  34.                         char x = (char)(n1 - 10 + 'A');
  35.                        
  36.                         //先定义一个为char类型的变量,通过你原本的三目运算的条件,换成if else语句。(如下也是)
  37.                        
  38.                         System.out.println(x);
  39.                 }
  40.                 else
  41.                         System.out.println(n1);
  42.                        
  43.                        
  44.                 num = num >> 4;
  45.                 int n2 = num & 15;
  46.                
  47.                 if (n1 > 9) {
  48.                         char y = (char)(n2 - 10 + 'A');
  49.                         System.out.println(y);
  50.                 }
  51.                 else
  52.                         System.out.println(n2);

  53.     }
  54. }

复制代码



我的看法,可能有不足,先供你参考。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2