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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 毛标 中级黑马   /  2012-8-14 22:38  /  1866 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 毛标 于 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.在视屏里听的不是很清楚,希望大虾解释下~

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
C:\Users\zorro\Desktop\无标题.png
回复 使用道具 举报
C:\Users\zorro\Desktop\无标题.jpg
回复 使用道具 举报

回个图片不容易呀。

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1

查看全部评分

回复 使用道具 举报
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
                               

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1

查看全部评分

回复 使用道具 举报
与上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位,

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
王德升 发表于 2012-8-14 23:56
与上1啊,就是一个数与上1,前面省略了31个0即:

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

是省略了28个0,失误了, - -,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马