黑马程序员技术交流社区

标题: 进制转换的问题 已解决 [打印本页]

作者: 毛标    时间: 2012-8-14 22:38
标题: 进制转换的问题 已解决
本帖最后由 毛标 于 2012-8-15 12:28 编辑

class ArrayTest6
{
public static void main(String[] args)
{
//  toHex(60);
  toBin(6);
}

public static void toBin(int num)
{
  //定义二进制的表。
  char[] chs = {'0','1'};
  //定义一个临时存储容器。
  char[] arr = new char[32];
  //定义一个操作数组的指针
  int pos = arr.length;
  while(num!=0)
  {
   int temp = num & 1;
   arr[--pos] = chs[temp];
   num = num >>> 1;
  }
  for(int x=pos; x<arr.length; x++)
  {
   System.out.print(arr[x]);
  }
}
}
int temp = num & 1;这里为什么要&1.在视屏里听的不是很清楚,希望大虾解释下~

作者: 左建飞    时间: 2012-8-14 23:27
C:\Users\zorro\Desktop\无标题.png
作者: 左建飞    时间: 2012-8-14 23:29
C:\Users\zorro\Desktop\无标题.jpg
作者: 左建飞    时间: 2012-8-14 23:32

回个图片不容易呀。
作者: 杨健yj    时间: 2012-8-14 23:41
int temp = num & 1

举个例子吧,temp = 6;
我们知道数据在电脑中都是以二进制形式存储的,那么他在电脑中的二进制是:
                                00000000        00000000        00000000        00000110
1的二进制是:        00000000        00000000        00000000        00000001
                                                                                                                &
                                ----------------------------------------------
                                00000000        00000000        00000000        00000000   两者&运算完,就会把temp的最后一位0保留下来

                                这不就是我们要求的十进制数6的二进制形式的最低以为吗


                                然后在num = num >>> 1
此时                       

                                00000000        00000000        00000000        00000011        注意他的值得变化
1的二进制是:        00000000        00000000        00000000        00000001
                                                                                                                &
                                ----------------------------------------------  两者&运算完,就会把temp的最后一位1保留下来

                                00000000        00000000        00000000        00000001

                                然后在num = num >>> 1

                                00000000        00000000        00000000        00000001   注意他的值得变化
1的二进制是:        00000000        00000000        00000000        00000001
                                                                                                                &
                                ----------------------------------------------  两者&运算完,就会把temp的最后一位1保留下来

                                00000000        00000000        00000000        00000001

                                所以6的二进制形式为110即:00000000        00000000        00000000        00000110
                               
作者: 王德升    时间: 2012-8-14 23:56
与上1啊,就是一个数与上1,前面省略了31个0即:

  0000-0000  0000-0000 0000-0000 0000-0110    =num =6;
& 0000-0000  0000-0000 0000-0000 0000-0001
——————————————————————————————
  0000-0000  0000-0000 0000-0000 0000-0000

t  &  f  = f;
t  &  t  = t;
f  &  f  = f;
f  &  t  = f;

6就最后四位一&就没有了,跟你说60的十六进制,
//先取60二进制的最低4位&15,依次类推,直到前面都是0。(负数要取反+1,我就不多说了)
  0000-0000  0000-0000 0100-1100 1110-0110    =num=60;
& 0000-0000  0000-0000 0000-0000 0000-1111
——————————————————————————————
  0000-0000  0000-0000 0100-1100 1110-0110   =6 //结果不是这个吗,然后再右移四位在&15,

   0000-0000  0000-0000 0000-0100 1100-1110   -0110  
& 0000-0000  0000-0000 0000-0000 0000-1111
———————————————————————————
  0000-0000  0000-0000 0000-0000 0000-1110 =14;

到后来直接可以用: Integer.toBinaryString(60);

总之取最低4位,


作者: 王德升    时间: 2012-8-14 23:57
王德升 发表于 2012-8-14 23:56
与上1啊,就是一个数与上1,前面省略了31个0即:

  0000-0000  0000-0000 0000-0000 0000-0110    =num =6 ...

是省略了28个0,失误了, - -,




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