A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ぺsimon☆ 中级黑马   /  2013-4-1 23:26  /  1994 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

代码如下:
class Test
{
        public static void main(String[] args)
        {
        int num=60;
        //&15把最后四位取出来
        int n1=num & 15;
        //判断n1是否大于9,如果大于9就把n1转为字母,小于9就输出数字
        System.out.println(n1>9?(char)(n1-10+'A'):n1);
       
        int temp=60>>>4;
        int n2=temp & 15;
        System.out.println(n2>9?(char)(n2-10+'A'):n2);
        }
}

运算结果如下:
E:\Java\jdk1.6.0_23\experience_heima\2>java Test
670
E:\Java\jdk1.6.0_23\experience_heima\2>
疑问:代码按照毕老师视频写了,但是运算出来却是670,应该是c3才对啊,为什么呢,各位兄弟帮帮忙洛谢谢

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

12 个回复

倒序浏览
本帖最后由 孙百鑫 于 2013-4-2 00:11 编辑

class Test
{
         public static void main(String[] args)
         {
         int num=60;
         //&15把最后四位取出来
         int n1=num & 15;
         //判断n1是否大于9,如果大于9就把n1转为字母,小于9就输出数字
                 if(n1>9)//我用的是if语句进行的判断.实际上和n1>9?这个差不多.可能你没学到呢吧. - -|||       只能这样了...希望的帮到你...我确实尽力了0.0
                 {
                         System.out.println((char)(n1-10+'A'));//问题应该是这句话没有被转义成字符.具体为什么我研究了半天...也没弄清楚.哥们尽力了
                                                                                 //明白了..是(n1>9?(char)(n1-10+'A'):n1)转换完字符之后又和n1做运算.又被提升了.所以打印的才是数字
                 }

         
        int temp=60>>>4;
         int n2=temp & 15;
         System.out.println(n2>9?(char)(n2-10+'A'):n2);
         }
}

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
  1. /**
  2. * 讲解:
  3. *         如果想把一个10进制的数,转成16进制,
  4. *  1,让该num & 15,得到一个数字,然后将其转成16进制,存起来
  5. *  2,把num 右移4位,得到一个新值,重新赋值给num,
  6. *  3,继续第1步。
  7. */
  8. public class Demo {
  9.           public static void main(String[] args)
  10.       {
  11.                   int num = 100;
  12.               toHex(num);
  13.       }
  14.           public static void toHex(int num){
  15.                   StringBuffer str = new StringBuffer();
  16.               int i = 1;
  17.               while(num>0){                //当num>0时,循环才可以进行
  18.                       System.out.println("第"+i+++"次循环");
  19.                       int nn = num & 15;
  20.                       if(nn>9){
  21.                               System.out.println((char)((nn-10)+'A'));
  22.                               str.append((char)((nn-10)+'A'));
  23.                       }else{
  24.                               str.append(nn);
  25.                               System.out.println(nn);
  26.                       }
  27.                       num = num>>>4;
  28.               }
  29.               System.out.println(str.reverse());
  30.           }
  31. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
孙百鑫 发表于 2013-4-2 00:05
class Test
{
         public static void main(String[] args)

哦,好的谢谢你兄弟,我先试一下
回复 使用道具 举报
孙百鑫 发表于 2013-4-2 00:05
class Test
{
         public static void main(String[] args)

n1>9?(char)(n1-10+'A'):n1)
(char)(n1-10+'A')    不是已经把运算结果转换成字符了吗
回复 使用道具 举报
  System.out.println(n1>9?(char)(n1-10+'A'):n1);这个三目运算符返回值类型相同,发生了自动转型,前面的char被提升为int了。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
你的结果应该是673吧
public static void main(String[] args)
        {
        int num=60;
        //&15把最后四位取出来
        int n1=num & 15;
        //判断n1是否大于9,如果大于9就把n1转为字母,小于9就输出数字
        System.out.println(n1>9?(char)(n1-10+'A'):n1);
/*
这一步可以拆开看
int res = n1>9?(char)(n1-10+'A'):n1;//注意 变量res只能定义成int型,因为三元运算符的结果可能是冒号前的,也可能是冒号后的。
而你虽然把冒号前的强制转成char类型,但冒号后的还是int型。所以就算结果是冒号前的,char类型也会再次被强制转成int型.
System.out.println(res);

  */      
        int temp=60>>>4;
        int n2=temp & 15;
        System.out.println(n2>9?(char)(n2-10+'A'):n2);
        }

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
if else的简写格式为三元运算符即:变量=(条件表达式)?表达式1:表达式2
但三元运算符算完之后一定有一个结果,这就是弊端。
这里把三元运算符改为if else格式则就是你想要的结果了
  1. class Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.         int num=60;
  6.         //&15把最后四位取出来
  7.         int n1=num & 15;
  8.         //判断n1是否大于9,如果大于9就把n1转为字母,小于9就输出数字
  9.         if (n1>9)
  10.         {
  11.                         System.out.println((char)(n1-10+'A'));
  12.         } else
  13.                                 System.out.println(n1);
  14.       
  15.         int temp=60>>>4;
  16.         int n2=temp & 15;
  17.         System.out.println(n2>9?(char)(n2-10+'A'):n2);
  18.         }
  19. }
复制代码
输出结果 C 3

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
黑马李超 发表于 2013-4-2 00:34
你的结果应该是673吧
public static void main(String[] args)
        {

怎么毕老师写的是System.out.println(n1>9? (char)(n1-10+'A'):n1);
打印结果是字母,我的就是数字呢?
兄弟应该怎么改,能输出字母呢?
回复 使用道具 举报
本帖最后由 黑马李超 于 2013-4-2 00:45 编辑
ぺsimon☆ 发表于 2013-4-2 00:39
怎么毕老师写的是System.out.println(n1>9? (char)(n1-10+'A'):n1);
打印结果是字母,我的就是数字呢?
...

改成System.out.println((char)(n1-10+'A') : (char) n1)就可以了
但是这个是不成熟的代码  只能计算已经知道结果的数的十六进制
如果要求任意数的十六进制 3L的就可以了
回复 使用道具 举报
黑马李超 发表于 2013-4-2 00:44
改成System.out.println((char)(n1-10+'A') : (char) n1)就可以了
但是这个是不成熟的代码  只能计算已经 ...

int num=60;
我已经把num定义了已知数了
回复 使用道具 举报
郑晓飞 发表于 2013-4-2 00:35
if else的简写格式为三元运算符即:变量=(条件表达式)?表达式1:表达式2
但三元运算符算完之后一定有一 ...

哦,那我明白了,三元运算符,三个返回值会自动提升为最高那位的,谢谢大家呵呵
但是我还是不明白为什么毕老师写的跟我一样,他输出就是c3了
回复 使用道具 举报
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马