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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© orgcheng 中级黑马   /  2015-9-19 15:31  /  5410 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
请编写程序交换一个数的二进制的奇数位和偶数位。(使用越少的指令越好)
给定一个int x,请返回交换后的数int。
例如,输入10,返回5
----------------------
    10-->5        // 十进制
1010-->0101  // 二进制

意思是:第1位和第2位交换,第3位和第4位交换,依次类推
----------------------

最佳答案

查看完整内容

/*请编写程序交换一个数的二进制的奇数位和偶数位。(使用越少的指令越好) // 给定一个int x,请返回交换后的数int。 // 例如,输入10,返回5 // ---------------------- // 10-->5 // 十进制 //1010-->0101 // 二进制 // // 意思是:第1位和第2位交换,第3位和第4位交换,依次类推 * * 分析:1.需要取出奇数位和偶数位 * 2.int型占4个字节的空间,给定值与(0b10101010101010101010101010101010)相与可得偶数 ...

11 个回复

倒序浏览
/*请编写程序交换一个数的二进制的奇数位和偶数位。(使用越少的指令越好)
// 给定一个int x,请返回交换后的数int。
// 例如,输入10,返回5
// ----------------------
//     10-->5        // 十进制
//1010-->0101  // 二进制
//
// 意思是:第1位和第2位交换,第3位和第4位交换,依次类推
*
* 分析:1.需要取出奇数位和偶数位
*     2.int型占4个字节的空间,给定值与(0b10101010101010101010101010101010)相与可得偶数位
*                             与(0b01010101010101010101010101010101)相与可得奇数位_
*     3.奇数位左移一位,偶数位右移一位,然后两者进行或运算,即可实现偶数位与奇数位的交换                     
*
*
        */
        public static void main(String[] args) {
               
                int x = 10;
               //获取偶数位并右移一位
                int a = (x&0b10101010101010101010101010101010)>>1;
               //获取奇数位并左移一位
                int b = (x&0b01010101010101010101010101010101)<<1;
                //两者进行或运算得到结果
                System.out.println(a|b);
               

        }
回复 使用道具 举报
tianweidong 发表于 2015-9-19 16:45
/*请编写程序交换一个数的二进制的奇数位和偶数位。(使用越少的指令越好)
// 给定一个int x,请返回交换 ...

试了一下编译有问题,怎么解决呢?




回复 使用道具 举报
本帖最后由 tianweidong 于 2015-9-19 17:45 编辑

好像是版本的问题,我这边运行没有问题
回复 使用道具 举报
代码还有点小问题,首先,做不到int 类型返回或输出 保留高位非0数字前面的0,再有就是输入一个负数就...
  1. package cn.itcast;

  2. /*
  3. * 请编写程序交换一个数的二进制的奇数位和偶数位。(使用越少的指令越好)
  4. * 给定一个int x,请返回交换后的数int。
  5. *
  6. * 思路:
  7. *         int --> String
  8. *         String --> char[]
  9. *         char[] --> String
  10. *         String --> int
  11. */
  12. public class SwitchBinary {

  13.         public static void main(String[] args) {
  14.                 String string = Integer.toBinaryString(10);
  15.                
  16.                 char[] cs = string.toCharArray();
  17.                
  18.                 for (int i = cs.length - 1; i > 0; i -= 2) {
  19.                         char temp = cs[i];
  20.                         cs[i] = cs[i - 1];
  21.                         cs[i - 1] = temp;
  22.                 }
  23.                
  24.                 string = new String(cs);
  25.                 System.out.println(string);
  26.                
  27. //                Integer integer = Integer.valueOf(string);
  28. //                System.out.println(integer);
  29. //                int i = Integer.parseInt(string);
  30. //                System.out.println(i);

  31.         }

  32. }
复制代码



回复 使用道具 举报
想问一下。。用异或表达式不可以吗?
回复 使用道具 举报
Coolman 发表于 2015-9-19 19:29
代码还有点小问题,首先,做不到int 类型返回或输出 保留高位非0数字前面的0,再有就是输入一个负数就...

...

对你的代码进行了一些针对性的改动。我觉得,其中int类型返回使用Integer类里面的parseInt方法就可以解决,而如果输入是负数,我觉得其实还好,就怕输入的是正数,然后转成2进制的时候长度是奇数了,那么就有一个没法进行互换了。所以针对这点,我加了一个字符串长度的判断。

  1. public class Test41 {
  2.         public static void main(String[] args) {
  3.                 // TODO Auto-generated method stub
  4.                  String string = Integer.toBinaryString(10);
  5.          
  6.                  StringBuilder sb=new StringBuilder();
  7.                  //判断字符串长度的奇偶性,如果是奇数,就在字符串前面添个零
  8.                  if(string.length()%2!=0){
  9.                          sb.append(0).append(string);
  10.                          string=sb.toString();
  11.                  }
  12.          char[] cs = string.toCharArray();
  13.          
  14.          for (int i = cs.length - 1; i > 0; i -= 2) {
  15.                  char temp = cs[i];
  16.                  cs[i] = cs[i - 1];
  17.                  cs[i - 1] = temp;
  18.          }
  19.          
  20.          string = new String(cs);
  21.          //将二进制的字符串形式转换成十进制
  22.          int j=Integer.parseInt(string,2);
  23.          System.out.println(j);
  24.          
  25.         }
  26. }
复制代码
回复 使用道具 举报
tianweidong 发表于 2015-9-19 17:41
好像是版本的问题,我这边运行没有问题

好吧,你的jdk版本是几多
回复 使用道具 举报
水果牛牛 发表于 2015-9-19 23:10
对你的代码进行了一些针对性的改动。我觉得,其中int类型返回使用Integer类里面的parseInt方法就可以解决 ...

我理解错了,还以为要返回二进制序列呢,长度判断做的很好
回复 使用道具 举报
Coolman 发表于 2015-9-20 20:15
我理解错了,还以为要返回二进制序列呢,长度判断做的很好

哈哈,互相学习互相学习
回复 使用道具 举报
tianweidong 发表于 2015-9-19 15:31
/*请编写程序交换一个数的二进制的奇数位和偶数位。(使用越少的指令越好)
// 给定一个int x,请返回交换 ...

这个思路很牛逼。
回复 使用道具 举报
没有来得及看懂,不过已经收藏了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马