黑马程序员技术交流社区

标题: 初学者 进制 学的云里雾里 [打印本页]

作者: 灬王一鹏    时间: 2015-9-5 22:11
标题: 初学者 进制 学的云里雾里
进制这一块看了好几遍了,每次当时懂了,过一段时间就忘了.
求大神教教这一块应该用什么姿势学?
作者: 兴许不接客    时间: 2015-9-5 22:21
  多练习吧 ,还有就是搞清楚原理
作者: asinzuo    时间: 2015-9-5 22:47
你不要把所有代码都被背上,你只要记住,主要的代码就是三句话。其他的顺藤摸瓜,就能想起来了,再简单的讲,一问你进制转换,你就要想到 "3" 。

////////////////////重要的就是三步////////////////////////                       
                        int temp = num & base ;//&的目的是为了获得最低几位的 1
                        sb.append(chs[temp]);
                        num = num >>> offSet;
//////////////////////////////////////////////////       

不知道你现在掌握的是哪一种版本的转换代码的写法,我这里给出的是最终版的最简洁的版本。
  1. 进制转换练习
  2. 十进制-转16进制(其实是二进制--->16进制,因为用的是位运算,10进制转成二进制后,再运算的)就是获取32位中的每4位。首先看最低4位,其实就是拿4位里的有效位1,用这个数&1111,就得到最低4位了。再右移4位
  3. 10--->8 右移3位。
  4. 静态方法:Integer.toBinaryString(int a)把整数转成二进制

  5.         public static void main(String[] args)
  6.         {
  7.                 toHex(60);
  8.                 toOctal(8);
  9.                 toBinary(6);
  10.         }
  11.         private static void toHex(int num) {
  12.                 trans(num,15,4);
  13.         }
  14.         private static void toOctal(int num) {
  15.                 trans(num,7,3);
  16.         }
  17.         private static void toBinary(int num) {
  18.                 trans(num,1,1);

  19.                 /*二进制还可以这么写
  20.                 StringBuffer sb = new StringBuffer();
  21.                 while(num!=0)
  22.                 {
  23.                         sb.append(num % 2);
  24.                         num = num /2;
  25.                 }
  26.                 System.out.println(sb.reverse());
  27.                 */       
  28.       }
  29.         private static void trans(int num ,int base ,int offSet) {

  30.                 StringBuffer sb = new StringBuffer();
  31.                 int numberSystem = num ;
  32.                 //查表法
  33.                 char [] chs = {'0','1','2','3',
  34.                                            '4','5','6','7',
  35.                                            '8','9','A','B',
  36.                                            'C','D','E','F'};
  37.                 //转成二进制
  38.                 while(num!=0)
  39.                 {
  40.         ////////////////////重要的就是三步////////////////////////                       
  41.                         int temp = num & base ;//&的目的是为了获得最低几位的 1
  42.                         sb.append(chs[temp]);
  43.                         num = num >>> offSet;
  44. //////////////////////////////////////////////////                       
  45.                 }
  46.                 System.out.println(numberSystem+"转成"+(base+1)+"进制:"+sb.reverse());
  47.         }
复制代码


作者: 灬王一鹏    时间: 2015-9-5 22:58
asinzuo 发表于 2015-9-5 22:47
你不要把所有代码都被背上,你只要记住,主要的代码就是三句话。其他的顺藤摸瓜,就能想起来了,再简单的讲 ...

谢谢 学长   拿走了 真心感谢!
作者: kieedi    时间: 2015-9-5 23:00
这个理解就好了吧,老师说了, 不用太操心这个,后期不咋用的。
作者: silencea    时间: 2015-9-5 23:00
用王者的姿势.
作者: 平凡的鱼    时间: 2015-9-5 23:00
一样对进制头疼,感觉还是理解为上.

作者: 大大的大孩    时间: 2015-9-5 23:02
哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥个人
作者: 群魔乱舞    时间: 2015-9-5 23:03
多看,多联系就好了
作者: Rzzz    时间: 2015-9-5 23:03
前面层主那个三步get 有用呀..
作者: 韩春兴    时间: 2015-9-5 23:05
额(⊙o⊙)…(⊙o⊙)…(⊙o⊙)…
作者: 淡忘、悲年华    时间: 2015-9-5 23:06
理解透了,就记住了
作者: 阮文江    时间: 2015-9-5 23:06
这些东西本来就容易忘记,理解就好了,以后用多了自然就记得了!
作者: 魁子    时间: 2015-9-5 23:12
asinzuo 发表于 2015-9-5 22:47
你不要把所有代码都被背上,你只要记住,主要的代码就是三句话。其他的顺藤摸瓜,就能想起来了,再简单的讲 ...

每一句基本都理解,就是让我写````逻辑顺序就会乱!也就是跟不会写一样`````也正试图记住它好难```

只知道转16进制&15  右移4位
        转8进制&7   右移三位
     转2进制%1   右移一位

int offste的作用是什么?谁给它赋值??
作者: 迷茫不堪的年纪    时间: 2015-9-5 23:50
多练就好




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